2016-11-18 7 views
4

Spark SQL 1.6.1 udfでブロードキャストコレクションを使用する方法。 UDFudfでブロードキャストコレクションを使用するには?

sqlContext.sql("""Select col1,col2,udf_1(key) as value_from_udf FROM table_a""") 

udf_1()下に示すように、メインSQLから呼び出されるべきではメインSQLに値を返すためにブロードキャスト小さなコレクションを見ている必要があります。ここで

答えて

3

SQL文の中UDFとしてlambda機能を採用し、検索を実行するために、放送変数の使用を示す、pySparkで最小限の再現性の例です。

# Create dummy data and register as table 
df = sc.parallelize([ 
    (1,"a"), 
    (2,"b"), 
    (3,"c")]).toDF(["num","let"]) 
df.registerTempTable('table') 

# Create broadcast variable from local dictionary 
myDict = {1: "y", 2: "x", 3: "z"} 
broadcastVar = sc.broadcast(myDict) 
# Alternatively, if your dict is a key-value rdd, 
# you can do sc.broadcast(rddDict.collectAsMap()) 

# Create lookup function and apply it 
sqlContext.registerFunction("lookup", lambda x: broadcastVar.value.get(x)) 
sqlContext.sql('select num, let, lookup(num) as test from table').show() 
+---+---+----+ 
|num|let|test| 
+---+---+----+ 
| 1| a| y| 
| 2| b| x| 
| 3| c| z| 
+---+---+----+ 
関連する問題