我试图将我的RDD键值对中的列[2]值从字符串转换为整数,以便我能够将它们相加并计算平均值。
我试图让列[2]在映射阶段自动显示为整数,但我收到错误,“TypeError:'type'对象没有属性'getitem'”
textfile = sc.textFile("hdfs://...csv")
test = textfile.map(lambda x: (x.split(",")[1], x.split(",")(int[2]))
在PySpark RDD中将column [2]值转换/映射为整数的正确方法是什么?
我建议尝试这个
import numpy as np
mat = sc.parallelize([np.array(['', '10.0', '100.0']), np.array(['2.0', '', '200.0']), np.array(['50.0', '30.0', ''])])
colnumber = 2
rdd_col = mat.map(lambda x: x[colnumber])
rdd_col_without_na = rdd_col.filter(lambda x: x!='')
rdd_float = rdd_col_without_na.map(lambda x:[x]).map(lambda x: float(x[0]))
然后,您可以使用mean()函数计算平均值
meanOfRddCol = rdd_float.mean()
正如评论中指出的那样,问题在于索引。但是我想补充一点,你还应该检查空值,并且可以立即使用元组,这更容易理解和使用。
我建议做以下事情:
test = textfile.map(lambda x: x.split(','))
remove_nulls = test.filter(lambda (x,y): y is not None)
with_ints = remove_nulls.map(lambda (x,y): (x,int(y)))
现在您可以轻松计算平均值