Apache Spark 2.0 - date_add 函数
Posted
技术标签:
【中文标题】Apache Spark 2.0 - date_add 函数【英文标题】:Apache Spark 2.0 - date_add function 【发布时间】:2017-02-11 05:18:34 【问题描述】:我有一个带有日期和整数的简单模式。我想使用 date_add 将 int 添加到日期。
scala> val ds1 = spark.read.option("inferSchema",true).csv("samp.csv")
ds1.printSchema();
root
|-- _c0: timestamp (nullable = true)
|-- _c1: integer (nullable = true)
我无法获取 date_add 工作的第一个参数...请帮助!
scala> val ds2 = ds1.map ( x => date_add(x.getAs[timestamp]("_c0"), x.getAs[Int]("_c1")))
<console>:28: error: not found: type timestamp
scala> val ds2 = ds1.map ( x => date_add(x.getAs[Column]("_c0"), x.getAs[Int] ("_c1")))
<console>:28: error: not found: type Column
【问题讨论】:
【参考方案1】:date_add
不是你的直接问题...not found: type timestamp, Column
老实说,我不确定您希望x.getAs[timestamp]
如何工作,但另一方面,您需要导入。
import org.apache.spark.sql.Column
import org.apache.spark.sql.functions.date_add
现在试试
val ds2 = ds1.map x =>
date_add(ds1("_c0"), x.getAs[Int] ("_c1"))
(不过,最好不要使用Dataset.map
)
【讨论】:
非常感谢!是的,我很沮丧,我正在尝试一切scala> val ds2 = ds1.map (x => date_add(ds1.col("c0"), x.getAs[Int]("_c1")))ds1.col("_c1").as[Int]
,或者类似的东西
col(String name)
函数是正确的。第二个参数必须是整数,而不是列。或者,您可以尝试原始 SQL,而不是弄乱数据集方法以上是关于Apache Spark 2.0 - date_add 函数的主要内容,如果未能解决你的问题,请参考以下文章
APACHE SPARK 2.0 API IMPROVEMENTS: RDD, DATAFRAME, DATASET AND SQL
Apache Spark 2.0三种API的传说:RDDDataFrame和Dataset