我想在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
答案 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 _