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"))) :30:错误:无法找到存储在数据集中的类型的编码器。通过导入 spark.implicits 支持原始类型(Int、String 等)和产品类型(案例类)。 未来版本中将添加对序列化其他类型的支持。 val ds2 = ds1.map ( x => date_add(ds1.col("_c0"), x.getAs[Int]("_c1"))) ^ 当我使用 foreach 时,我在 org.apache.spark 得到一个空指针异常 org.apache.spark.sql.Dataset$$anonfun$foreach$1.apply(Dataset.scala:2286)。 sql.Dataset$$anonfun$foreach$1.apply(Dataset.scala:2286) at org.apache.spark.sql.Dataset.foreach(Dataset.scala:2285) ... 48 已删除 原因:java.lang。 org.apache.spark.sql.Dataset.resolve(Dataset.scala:217) 处的 NullPointerException 新来的火花和所有这一切都如此无知如何进行。我的 ds 有价值观。 +--------------------+---+ | _c0|_c1| +--------------------+---+ |2017-01-01 00:00:...| 10| |2017-02-01 00:00:...| 28| +--------------------+---+ 就像我说的,理想情况下不要使用 Dataset.map(尤其是不要使用 foreach)。你可以试试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

Apache Spark 2.0:按降序排列到 orderBy() / sort() 列的表达式字符串

分布式配置 Spark 2.0版本 2.1版本 1.6版本

Apache Spark - 注册 UDF - 返回数据帧

spark 学习笔记-spark2.2.0