2017-01-26 11 views
3

Я хочу добавить столбец с случайно сгенерированным идентификатором в свой ядро ​​Spark. Чтобы сделать это, я использую UDF вызвать метод случайной выборки UUID UUID, как и так:Spark create UDF, который не принимает вход

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

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

Очевидно, что моя функция getRandomId не нужен входной параметр; однако я не могу понять, как создать UDF, который не принимает в качестве столбца. Возможно ли это в Spark?

Я использую Спарк 1.5

+2

Возможно дубликат функции [Scala и Spark UDF] (http://stackoverflow.com/questions/38633216/scala-and-spark-udf-function) – Yaron

ответ

3

вы можете зарегистрировать UDF без каких-либо Params. Здесь () => String разрешит требование

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

с помощью UDF (uuid) на DataFrame

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

вы можете попробовать это:

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

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

Хитрость заключается в том getRandomId _ создает функцию () => String из ваш метод