2017-10-20 107 views
-3

我是Scala Spark中的程序員,但我需要在項目中使用PySpark在Python中執行某些操作。 我想知道如何在PySpark中使用自定義的行=>行圖轉換。使用自定義函數的Pyspark

例如:我有一個數據幀是myDF:

id x1, x2 
1 5 3 
2 4 6 
3 9 10 

我想這個數據幀轉換爲另一個數據幀,與各行上的地圖操作。

所以我設計了一個map函數,它將一行作爲輸入,並生成一個新行作爲輸出。所以這是一個行=>行地圖:

def mySum (row): 

    id = row.id 
    result = row.x1 + row.x2 

    return Row(id, result) 

然後我想在python好歹使用,這類似於我在斯卡拉做

mynewdf = mydf.map(x=> mySum(x)) 

所以,預期的結果是這樣的:

id result 
1 8 
2 10 
3 19 

實際上,自定義函數非常複雜,所以我需要一個分離函數來描述它。

我該如何在Python中用PySpark來做到這一點。謝謝,

回答

1

相當於是一個lambda功能:

df.rdd.map(lambda x: mySum(x)) 

但如果功能只行作爲參數,可以直接傳遞函數map

df.rdd.map(mySum) 

def mySum (row): 
    id = row.id 
    result = row.x1 + row.x2 
    return Row(id=id, result=result) 

df.rdd.map(mySum).toDF().show() 
+---+------+ 
| id|result| 
+---+------+ 
| 1|  8| 
| 2| 10| 
| 3| 19| 
+---+------+