Spark创建了不输入的UDF

时间:2017-01-26 06:26:53

标签: scala apache-spark apache-spark-sql spark-dataframe udf

我想在Spark数据帧中添加一个随机生成的id列。为此,我使用UDF来调用UUID的随机UUID方法,如下所示:

def getRandomId(s:String) : String = {
    UUID.randomUUID().toString()
}

val idUdf = udf(getRandomId(_:String))
val newDf = myDf.withColumn("id", idUdf($"colName"))

显然,我的getRandomId函数不需要输入参数;但是,我无法弄清楚如何创建一个不接受列作为输入的UDF。这可能在Spark吗?

我正在使用Spark 1.5

2 个答案:

答案 0 :(得分:4)

你可以注册没有参数的udf。这里() => String将解决要求

import org.apache.spark.sql.functions.udf
val uuid = udf(() => java.util.UUID.randomUUID().toString)

在DataFrame上使用UDF(uuid

val newDf = myDf.withColumn("uuid", uuid())

答案 1 :(得分:1)

你可以试试这个:

assemblyShadeRules in assembly := Seq(
  ShadeRule.rename("com.google.guava.**" -> "my_conf.@1")
    .inLibrary("com.google.guava" % "config" % "11.0")
    .inProject
  )

技巧是def getRandomId() : String = { UUID.randomUUID().toString() } val idUdf = udf(getRandomId _) val newDf = df.withColumn("id", idUdf()) 从你的方法中创建一个函数getRandomId _