2017-09-07 64 views
0

在火花上的新手這裏...我怎樣才能使用火花數據集中的一列詢問鍵獲取一些值並將這些值作爲新列添加到數據集中?如何將字典鍵值項目應用於spark數據集中的列?

在Python中,我們有這樣的事:

df.loc[:,'values'] = df.loc[:,'key'].apply(lambda x: D.get(x)) 

其中d是前面定義Python中的功能。

如何在使用Java的火花中做到這一點?謝謝。

編輯: 例如: 我有以下數據集DF:

A 
1 
3 
6 
0 
8 

我想創建基於以下字典平日柱:

D[1] = "Monday" 
D[2] = "Tuesday" 
D[3] = "Wednesday" 
D[4] = "Thursday" 
D[5] = "Friday" 
D[6] = "Saturday" 
D[7] = "Sunday" 

,並添加列回我的數據集df:

A days 
1 Monday 
3 Wednesday 
6 Saturday 
0 Sunday 
8 NULL 

這是隻是一個例子,列A當然可以是除整數以外的任何東西。

+1

我建議你添加一些輸入和預期輸出你的問題也是如此。您已經提供了一個python片段,要求在Java中提供解決方案。不知道它是多麼有幫助。 – philantrovert

+0

只是增加了更多的細節 – user6396

回答

1
  1. 您可以使用df.withColumn返回一個新的df,其中包含新列values和之前的df值。
  2. 創建一個udf函數(用戶定義的函數)來應用字典映射。

這裏有一個重複的例子:

>>> from pyspark.sql.types import StringType 
>>> from pyspark.sql.functions import udf 
>>> df = spark.createDataFrame([{'A':1,'B':5},{'A':5,'B':2},{'A':1,'B':3},{'A':5,'B':4}], ['A','B']) 
>>> df.show() 
+---+---+ 
| A| B| 
+---+---+ 
| 1| 5| 
| 5| 2| 
| 1| 3| 
| 5| 4| 
+---+---+ 

>>> d = {1:'x', 2:'y', 3:'w', 4:'t', 5:'z'} 
>>> mapping_func = lambda x: d.get(x) 
>>> df = df.withColumn('values',udf(mapping_func, StringType())("A")) 
>>> df.show() 
+---+---+------+ 
| A| B|values| 
+---+---+------+ 
| 1| 5|  x| 
| 5| 2|  z| 
| 1| 3|  x| 
| 5| 4|  z| 
+---+---+------+ 
+0

謝謝,但我不知道如何在java中創建udf ... – user6396

+0

@ user6396你可以檢查這個:https://stackoverflow.com/questions/35348058/how-doi-i-呼叫A-UDF-ON-A-火花數據幀使用的Java – MedAli

相關問題