2017-07-31 58 views
0

我目前有一個pyspark數據框,其中一列包含我想用我寫的函數來查找的數字行,以返回一串信息。我知道簡單的方法是使用withCoulmn並定義一個UDF來從舊的創建一個新的列,但是有一些關於我的功能使它無法註冊爲UDF的方式。是否可以創建一個新的數據框與我的新列基於舊列的值而不使用UDF?在不使用UDF的情況下向pyspark數據框添加新列?

+0

你嘗試[內置函數](https://spark.apache.org/docs/2.1.1/api/java /index.html?org/apache/spark/sql/functions.html)? –

+0

沒有內置的函數可以做我要求的查找,從一個數字開始,向API發出請求,然後返回一個字符串結果 – user1775500

+1

您需要找到合併內置函數的方法。您永遠不會獲得滿足您要求的內置功能 –

回答

1

您可以從數據框轉到rdd然後回到數據框。例如,假設你有兩列的數據框 - 「COL1」和「COL2」:

df = sqlContext.createDataFrame([[1,2],[3,4],[5,6]],['col1','col2']) 
df.show() 

+----+----+ 
|col1|col2| 
+----+----+ 
| 1| 2| 
| 3| 4| 
| 5| 6| 
+----+----+ 

你可以轉換爲RDD,通過地圖運行它,並用返回一個元組「COL1」,' COL2' ,和你的新列 - 在這種情況下,‘COL3’(gen_col_3將是你的函數):

def gen_col_3(col1, col2): 
    return col1 + col2 

rdd = data.rdd.map(lambda x: (x['col1'], x['col2'], gen_col_3(x['col1'],x['col2']))) 

然後你就可以轉換回一個數據幀像這樣:

df = rdd.toDF(['col1','col2','col3']) 
df.show() 

+----+----+----+ 
|col1|col2|col3| 
+----+----+----+ 
| 1| 2| 3| 
| 3| 4| 7| 
| 5| 6| 11| 
+----+----+----+ 
相關問題