2017-10-20 65 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| 
+---+------+