我在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)
那这里发生了什么?
您没有使用正确的sum函数,而是使用
built-in
函数sum
(默认情况下)。所以
build-in
函数不能工作的原因是 这就需要一个iterable作为参数,在这里传递的列的名称是一个字符串,而built-in
函数不能应用于字符串。Ref. Python Official Documentation。您需要从
pyspark.sql.functions
导入正确的函数:相关问题 更多 >
编程相关推荐