0
我目前有一個pyspark數據框,其中一列包含我想用我寫的函數來查找的數字行,以返回一串信息。我知道簡單的方法是使用withCoulmn並定義一個UDF來從舊的創建一個新的列,但是有一些關於我的功能使它無法註冊爲UDF的方式。是否可以創建一個新的數據框與我的新列基於舊列的值而不使用UDF?在不使用UDF的情況下向pyspark數據框添加新列?
我目前有一個pyspark數據框,其中一列包含我想用我寫的函數來查找的數字行,以返回一串信息。我知道簡單的方法是使用withCoulmn並定義一個UDF來從舊的創建一個新的列,但是有一些關於我的功能使它無法註冊爲UDF的方式。是否可以創建一個新的數據框與我的新列基於舊列的值而不使用UDF?在不使用UDF的情況下向pyspark數據框添加新列?
您可以從數據框轉到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|
+----+----+----+
你嘗試[內置函數](https://spark.apache.org/docs/2.1.1/api/java /index.html?org/apache/spark/sql/functions.html)? –
沒有內置的函數可以做我要求的查找,從一個數字開始,向API發出請求,然後返回一個字符串結果 – user1775500
您需要找到合併內置函數的方法。您永遠不會獲得滿足您要求的內置功能 –