【发布时间】:2017-10-18 16:07:17
【问题描述】:
我正在尝试将函数应用于我的数据框列之一以转换值。列中的值类似于“20160907”,我需要值为“2016-09-07”。
我写了一个这样的函数:
def convertDate(inDate:String ): String = {
val year = inDate.substring(0,4)
val month = inDate.substring(4,6)
val day = inDate.substring(6,8)
return year+'-'+month+'-'+day
}
在我的 spark scala 代码中,我使用的是这个:
def final_Val {
val oneDF = hiveContext.read.orc("/tmp/new_file.txt")
val convertToDate_udf = udf(convertToDate _)
val convertedDf = oneDF.withColumn("modifiedDate", convertToDate_udf(col("EXP_DATE")))
convertedDf.show()
}
令人惊讶的是,在 spark shell 中,我能够毫无错误地运行。在 Scala IDE 中,我收到以下编译错误:
Multiple markers at this line:
not enough arguments for method udf: (implicit evidence$2:
reflect.runtime.universe.TypeTag[String], implicit evidence$3: reflect.runtime.universe.TypeTag[String])org.apache.spark.sql.UserDefinedFunction. Unspecified value parameters evidence$2, evidence$3.
我正在使用 Spark 1.6.2、Scala 2.10.5
有人可以告诉我我在这里做错了什么吗?
我在这篇文章中尝试过使用不同功能的相同代码:stackoverflow.com/questions/35227568/applying-function-to-spark-dataframe-column”。 这段代码我没有遇到任何编译问题。我无法找出我的代码的问题
【问题讨论】:
-
为什么是 udf(convertToDate _) 而不仅仅是 udf(convertToDate)?
-
@RobertHorvick 因为 udf 需要一个函数作为输入,而不是一个方法。使用下划线将方法“提升”为函数
-
在 IntelliJ IDEA 中工作正常。
-
在 Eclipse 中不工作
标签: scala apache-spark dataframe udf