python – PySpark DataFrame上的Sum运算在type为fine时给出TypeError
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – PySpark DataFrame上的Sum运算在type为fine时给出TypeError,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1152字,纯文字阅读大概需要2分钟。
内容图文
我在PySpark中有这样的DataFrame(这是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(默认情况下).
所以内置函数不起作用的原因是
这是一个可迭代的参数,其中传递的列的名称是一个字符串,内置函数不能应用于字符串. 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|
# +-----+-------+
内容总结
以上是互联网集市为您收集整理的python – PySpark DataFrame上的Sum运算在type为fine时给出TypeError全部内容,希望文章能够帮你解决python – PySpark DataFrame上的Sum运算在type为fine时给出TypeError所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。