首页 文章

Pyspark使用定制功能

提问于
浏览
-3

我是Scala Spark的程序员,但我需要在项目中使用PySpark在Python中做一些事情 . 我想知道如何在PySpark中使用自定义的row =>行映射转换 .

例如:我有一个数据帧mydf:

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

我想将此数据帧转换为另一个数据帧,并在每一行上执行映射操作 .

所以我设计了一个map函数,它以一行作为输入,并生成一个新行作为输出 . 所以它是一个Row => Row map:

def mySum (row):

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

   return Row(id, result)

然后我想在python中使用,这与我在Scala中的操作类似

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

所以预期的结果如下:

id  result
1    8
2    10
3    19

实际上,自定义函数非常复杂,所以我需要一个单独的函数来描述它 .

我怎么能用PySpark在Python中做到这一点 . 谢谢,

1 回答

  • 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|
    +---+------+
    

相关问题