rdd.map给出:typeError:未支撑的操作数类型 - :'row''and float'
我使用:
从数据框架创建一个RDDtemprdd = df.select('results').rdd
然后,我想对其中的所有对象进行计算(基本上是在我的"结果"列中,我现在认为是它自己的RDD):
sqrt(temprdd.map(lambda x : pow(x-mean,2)).sum())
但是我得到了:
file"/usr/local/src/spark20master/spark/python/pyspark/rdd.py",line 999,在 返回self.mappartitions(lambda x:[sum(x)])。fold(0,operator.add)文件",第7行,在 TypeError:未支撑的操作数类型 - :'行'和 'float'
我的平均值是浮标。我期望X是浮点的价值;但我猜是一排。哦,我在做什么错?谢谢。
从下面的df
选择results
列
temprdd = df.select('results').rdd
您在 map
中的lambda表达式应该是 x.results
之类的,而不仅仅是行类型的 x
temprdd.map(lambda x : pow(x.results - 7, 2))
@mrsrinivas的答案很有帮助,我遵循它。但是,它缺少使我困惑的一部分。主要问题代码来自包括null
值的结果。因此,对于包含结果列的表,使用以下代码选择IT代码:
tempDF = df.select(df.results.cast('float').alias('results'))
tempDF.show(5)
结果看起来像:
+-------+
|results|
+-------+
| null|
| 95.0|
| 93.0|
| null|
| 87.0|
+-------+
为了不选择null
值,您需要使用以下代码:
tempDF_NoNull = tempDF.na.drop()
tempDF_NoNull.show(5)
的结果将是:
+-------+
|results|
+-------+
| 95.0|
| 93.0|
| 87.0|
| 96.0|
| 82.0|
+-------+
现在要计算结果列的标准偏差,可以按以下计算:
std = sqrt(tempRDD.map(lambda x : pow(x.results-mean, 2)).sum()/count)