【问题标题】:Pyspark using customized functionPyspark 使用自定义函数
【发布时间】:2017-10-20 22:28:35
【问题描述】:

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

例如:我有一个数据框 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

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

如何在 Python 中使用 PySpark 执行此操作。谢谢,

【问题讨论】:

    标签: python apache-spark 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|
    +---+------+
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-11
      • 2018-08-28
      相关资源
      最近更新 更多