2017-01-26 4 views
3

Ich möchte eine Spalte mit einer zufällig generierten ID zu meinem Spark-Datenrahmen hinzufügen. Um dies zu tun, ich bin mit einem UDF UUID des zufälligen UUID-Methode aufrufen, etwa so:Spark erstellen UDF, die nicht Eingabe

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

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

Offensichtlich meine getRandomId Funktion nicht einen Eingabeparameter benötigt; Ich kann jedoch nicht herausfinden, wie eine UDF erstellt wird, die keine Spalte als Eingabe akzeptiert. Ist das in Spark möglich?

Ich bin mit Funken 1,5

+2

Möglich Duplikat der UDF-Funktion [Scala und Spark] (http://stackoverflow.com/questions/38633216/scala-and-spark-udf-function) – Yaron

Antwort

3

Sie UDF ohne params registrieren. Hier () => String löst die Anforderung

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

mit der UDF (uuid) auf Datenrahmen

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

Sie können dies versuchen:

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

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

Der Trick ist getRandomId _ erstellt eine Funktion () => String aus Ihre Methode

Verwandte Themen