【问题标题】:Spark create UDF that doesn't take in inputSpark 创建不接受输入的 UDF
【发布时间】:2017-06-11 14:20:25
【问题描述】:

我想在我的 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

【问题讨论】:

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


【解决方案1】:

您可以不带参数注册 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())

【讨论】:

  • 谢谢!这正是我想要做的。
【解决方案2】:

你可以试试这个:

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

val idUdf = udf(getRandomId _)
val newDf = df.withColumn("id", idUdf())

诀窍是getRandomId _ 从您的方法中创建一个函数() => String

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-22
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多