[英]How to compose column name using another column's value for withColumn in Scala Spark
[英]How to get the Integer value of a column in .withColumn function? [Spark - Scala]
我需要使用date_add()
函数将90天添加到数据框的列中。 该函数正常工作,但仅当我对90进行硬编码时才有效。如果数字在另一列中并且引用了该数字,则该函数会要求我提供一个整数才能工作。
此代码有效:
.withColumn("DATE_SUM_COLUMN",date_add(col("DATE_COLUMN"),90))
此代码不:
.withColumn("DATE_SUM_COLUMN",date_add(col("DATE_COLUMN"),col("number")))
谢谢。
请在此处尝试此操作,我将日期转换为秒,将天列转换为秒,并对两个columnns求和。 同样,我们必须将最终结果转换为日期格式。 date
是我的日期栏, add
是日期栏要add
的天数
import org.apache.spark.sql.functions._
.withColumn("new col", unix_timestamp($"date", "yyyy-MM-dd") + col("add")*24*60*60)
您仍然可以使用expr("date_add(date_column, days_to_add)")
函数来评估Spark SQL字符串:
import java.sql.Date
import com.holdenkarau.spark.testing.{DataFrameSuiteBase, SharedSparkContext}
import org.scalatest.FlatSpec
import org.apache.spark.sql.functions.expr
class TestSo2 extends FlatSpec with SharedSparkContext with DataFrameSuiteBase {
"date_add" should "add number of dates specified as Column" in {
import spark.implicits._
val df = Seq(
(Date.valueOf("2019-01-01"), 31),
(Date.valueOf("2019-01-01"), 32)
).toDF("date_column", "days_to_add")
df.show()
/**
* +-----------+-----------+
* |date_column|days_to_add|
* +-----------+-----------+
* | 2019-01-01| 31|
* | 2019-01-01| 32|
* +-----------+-----------+
*/
df.
withColumn(
"next_date",
expr("date_add(date_column, days_to_add)")
).
show
/**
* +-----------+-----------+----------+
* |date_column|days_to_add| next_date|
* +-----------+-----------+----------+
* | 2019-01-01| 31|2019-02-01|
* | 2019-01-01| 32|2019-02-02|
* +-----------+-----------+----------+
*/
}
}
我不知道为什么Spark开发人员没有将其作为Scala API的一部分的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.