lambda rdd.map给出:TypeError:不支持的操作数类型-:“行”和“浮点”

lambda rdd.map给出:TypeError:不支持的操作数类型-:“行”和“浮点”,lambda,pyspark,rdd,data-science-experience,Lambda,Pyspark,Rdd,Data Science Experience,rdd.map给出:TypeError:不支持的操作数类型为-:“行”和“浮点” 我使用以下方法从数据帧创建rdd: temprdd = df.select('results').rdd 然后我想对其中的所有对象进行计算,基本上在我的“结果”列中,我现在认为这是它自己的rdd: sqrt(temprdd.map(lambda x : pow(x-mean,2)).sum()) 但我得到了: 文件/usr/local/src/spark20master/spark/python/pyspark

rdd.map给出:TypeError:不支持的操作数类型为-:“行”和“浮点”

我使用以下方法从数据帧创建rdd:

temprdd = df.select('results').rdd
然后我想对其中的所有对象进行计算,基本上在我的“结果”列中,我现在认为这是它自己的rdd:

sqrt(temprdd.map(lambda x : pow(x-mean,2)).sum())
但我得到了:

文件/usr/local/src/spark20master/spark/python/pyspark/rdd.py,第行 999,在 返回self.mapPartitionslambda x:[sumx].fold0,operator.add文件,第7行,在中 TypeError:-:“行”和的操作数类型不受支持 “浮动”

我的意思是浮动。我期望x是一个浮点值;但我猜这是一行。我做错了什么?谢谢

当您从下面的df中选择结果列时

映射中的lambda表达式应该类似于x.results,而不仅仅是行类型的x

temprdd.map(lambda x : pow(x.results - 7, 2))
当您从下面的df中选择结果列时

映射中的lambda表达式应该类似于x.results,而不仅仅是行类型的x

temprdd.map(lambda x : pow(x.results - 7, 2))

@mrsrinivas给出的答案很有帮助,我遵循它。然而,它缺少了一个让我困惑的部分。 主要问题代码来自包含空值的结果。因此,对于包含结果列的表,可以使用以下代码选择代码:

tempDF=df.selectdf.results.cast'float'。别名'results' tempDF.show5 结果如下所示:

+----+ |结果| +----+ |空的| | 95.0| | 93.0| |空的| | 87.0| +----+ 因此,要不选择空值,需要使用以下代码:

tempDF_NoNull=tempDF.na.下降 tempDF_NoNull.show5 结果将是:

+----+ |结果| +----+ | 95.0| | 93.0| | 87.0| | 96.0| | 82.0| +----+ 现在,要计算结果列的标准偏差,可按以下公式计算:

std=sqrttempRDD.maplambda x:powx.results-MEANCE,2.sum/count
@mrsrinivas给出的答案很有帮助,我遵循它。然而,它缺少了一个让我困惑的部分。 主要问题代码来自包含空值的结果。因此,对于包含结果列的表,可以使用以下代码选择代码:

tempDF=df.selectdf.results.cast'float'。别名'results' tempDF.show5 结果如下所示:

+----+ |结果| +----+ |空的| | 95.0| | 93.0| |空的| | 87.0| +----+ 因此,要不选择空值,需要使用以下代码:

tempDF_NoNull=tempDF.na.下降 tempDF_NoNull.show5 结果将是:

+----+ |结果| +----+ | 95.0| | 93.0| | 87.0| | 96.0| | 82.0| +----+ 现在,要计算结果列的标准偏差,可按以下公式计算:

std=sqrttempRDD.maplambda x:powx.results-MEANCE,2.sum/count
@mrsrinivas平均值是前面设置的变量。我用硬编码的“7”测试了它,然后得到:TypeError:不支持的操作数类型为-:“Row”和“int”。因此,我认为问题在于“x”没有像我预期的那样得到解决,而不是平均值“行”没有任何意义,它应该是一个数字。@mrsrinivas平均值是前面设置的一个变量。我用硬编码的“7”测试了它,然后得到:TypeError:不支持的操作数类型为-:“Row”和“int”。因此,我认为问题在于“x”没有像我预期的那样得到解决,而不是平均值“行”没有任何意义,它应该是一个数字。