【发布时间】:2016-08-11 16:05:07
【问题描述】:
我在 PySpark 中有这样的 DataFrame(这是 take(3) 的结果,dataframe 很大):
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: +: 'int' 和 'str' 的操作数类型不受支持
但是,架构包含双精度值,而不是字符串(这来自 printSchema()):
root
|-- owner: string (nullable = true)
|-- a_d: double (nullable = true)
那么这里发生了什么?
【问题讨论】:
-
你确定你的所有台词都正常吗?我的意思是,您是否检查了所有行的 a_d 值是否有效?
-
@mark91 a_d 字段来自另一个数据帧中两个双列的乘法,我认为它不可能是一个字符串。有没有办法检查这个?
-
您可以执行一些操作,例如获取底层 RDD 并使用字段 a_d.. 上的 RegExp 对其进行过滤。或者您可以将结果写入 Hive 表并在读取它的列中查找 NULL通过 Hive... 或者,如果您有显示此问题的少数数据的子集,您甚至可以检查它...
标签: python apache-spark dataframe pyspark