PySpark数据帧上的Sum操作,在type为fin时给出TypeError

2024-05-15 02:58:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在PySpark中有这样的数据帧(这是take(3)的结果,数据帧非常大):

sc = SparkContext()
df = [Row(owner=u'u1', a_d=0.1), Row(owner=u'u2', a_d=0.0), Row(owner=u'u1', a_d=0.3)]

相同的所有者将有更多的行。我需要做的是在分组之后,将每个所有者的字段a_d的值求和为

b = df.groupBy('owner').agg(sum('a_d').alias('a_d_sum'))

但这是个错误

TypeError: unsupported operand type(s) for +: 'int' and 'str'

但是,架构包含两个值,而不是字符串(这来自printSchema()):

root
|-- owner: string (nullable = true)
|-- a_d: double (nullable = true)

那这里发生了什么?


Tags: 数据truedfaggpysparkrowsumsc
1条回答
网友
1楼 · 发布于 2024-05-15 02:58:48

您没有使用正确的sum函数,而是使用built-in函数sum(默认情况下)。

所以build-in函数不能工作的原因是 这就需要一个iterable作为参数,在这里传递的列的名称是一个字符串,而built-in函数不能应用于字符串。Ref. Python Official Documentation

您需要从pyspark.sql.functions导入正确的函数:

from pyspark.sql import Row
from pyspark.sql.functions import sum as _sum

df = sqlContext.createDataFrame(
    [Row(owner=u'u1', a_d=0.1), Row(owner=u'u2', a_d=0.0), Row(owner=u'u1', a_d=0.3)]
)

df2 = df.groupBy('owner').agg(_sum('a_d').alias('a_d_sum'))
df2.show()

# +-----+-------+
# |owner|a_d_sum|
# +-----+-------+
# |   u1|    0.4|
# |   u2|    0.0|
# +-----+-------+

相关问题 更多 >

    热门问题