python - 在 pyspark 中对列表中的不同数据框列求和的正确方法是什么?

标签 python apache-spark pyspark apache-spark-sql pyspark-sql

我想对 spark 数据框中的不同列求和。

代码

from pyspark.sql import functions as F
cols = ["A.p1","B.p1"]
df = spark.createDataFrame([[1,2],[4,89],[12,60]],schema=cols)

# 1. Works
df = df.withColumn('sum1', sum([df[col] for col in ["`A.p1`","`B.p1`"]]))

#2. Doesnt work
df = df.withColumn('sum1', F.sum([df[col] for col in ["`A.p1`","`B.p1`"]]))

#3. Doesnt work
df = df.withColumn('sum1', sum(df.select(["`A.p1`","`B.p1`"])))

为什么不是方法 2。 & #3。不工作? 我在 Spark 2.2 上

最佳答案

因为,

# 1. Works
df = df.withColumn('sum1', sum([df[col] for col in ["`A.p1`","`B.p1`"]]))

在这里,您使用的是 python 内置的求和函数,该函数将可迭代对象作为输入,因此可以正常工作。 https://docs.python.org/2/library/functions.html#sum

#2. Doesnt work
df = df.withColumn('sum1', F.sum([df[col] for col in ["`A.p1`","`B.p1`"]]))

在这里,您使用的是 pyspark sum 函数,该函数将列作为输入,但您正试图在行级别获取它。 http://spark.apache.org/docs/latest/api/python/pyspark.sql.html#pyspark.sql.functions.sum

#3. Doesnt work
df = df.withColumn('sum1', sum(df.select(["`A.p1`","`B.p1`"])))

在这里,df.select() 返回一个数据帧并尝试对数据帧求和。在这种情况下,我认为,您必须逐行迭代并对其应用求和。

关于python - 在 pyspark 中对列表中的不同数据框列求和的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47690615/

相关文章:

apache-spark - 如何在 pyspark 数据帧读取方法中包含分区列

python - pandas groupby 计算字符串在列上的出现次数

hadoop - Spark 作业可能有多种配置吗?

apache-spark - 分区如何在Spark中工作?

apache-spark - 如何从 DataFrame apache spark 中找到最大值 Alphabet?

python - PySpark ReduceByKey

python - 如何更改每一行中特定单元格左侧的所有值

Python 从 Excel 日期/时间字段读取不准确

python - 我可以用 Numpy 制作随机面具吗?

python - 如何展平在 PySpark 中使用 zip 转换创建的元组