lambda rdd.map gives: TypeError: unsupported operand type(s) for -: 'Row' and 'float'
lambda rdd.map gives: TypeError: unsupported operand type(s) for -: 'Row' and 'float'
rdd.map 给出:TypeError:不支持的操作数类型 -:'Row' 和 'float'
我使用数据帧创建一个 rdd:
temprdd = df.select('results').rdd
然后我想对其中的所有对象进行计算(基本上在我的 'results' 列中,我现在认为它是它自己的 rdd):
sqrt(temprdd.map(lambda x : pow(x-mean,2)).sum())
但我得到:
File "/usr/local/src/spark20master/spark/python/pyspark/rdd.py", line
999, in
return self.mapPartitions(lambda x: [sum(x)]).fold(0, operator.add) File "", line 7, in
TypeError: unsupported operand type(s) for -: 'Row' and
'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
值的结果。因此,对于包含结果列的 table,它的代码是 selected 使用以下代码:
tempDF = df.select(df.results.cast('float').alias('results'))
tempDF.show(5)
结果将如下所示:
+-------+
|results|
+-------+
| null|
| 95.0|
| 93.0|
| null|
| 87.0|
+-------+
所以为了不select 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)
rdd.map 给出:TypeError:不支持的操作数类型 -:'Row' 和 'float'
我使用数据帧创建一个 rdd:
temprdd = df.select('results').rdd
然后我想对其中的所有对象进行计算(基本上在我的 'results' 列中,我现在认为它是它自己的 rdd):
sqrt(temprdd.map(lambda x : pow(x-mean,2)).sum())
但我得到:
File "/usr/local/src/spark20master/spark/python/pyspark/rdd.py", line 999, in return self.mapPartitions(lambda x: [sum(x)]).fold(0, operator.add) File "", line 7, in TypeError: unsupported operand type(s) for -: 'Row' and '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
值的结果。因此,对于包含结果列的 table,它的代码是 selected 使用以下代码:
tempDF = df.select(df.results.cast('float').alias('results'))
tempDF.show(5)
结果将如下所示:
+-------+
|results|
+-------+
| null|
| 95.0|
| 93.0|
| null|
| 87.0|
+-------+
所以为了不select 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)