lambda rdd.map 给出: 类型错误: 不支持的操作数类型 -: 'Row' 和 'float'



rdd.map给出:typeError:未支撑的操作数类型 - :'row''and float'

我使用:

从数据框架创建一个RDD
temprdd = 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)

相关内容

  • 没有找到相关文章

最新更新