将KVP中的RDD值转换为PySpark中的整数

问题描述 投票:0回答:2

我试图将我的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]值转换/映射为整数的正确方法是什么?

python type-conversion integer pyspark rdd
2个回答
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()

1
投票

正如评论中指出的那样,问题在于索引。但是我想补充一点,你还应该检查空值,并且可以立即使用元组,这更容易理解和使用。

我建议做以下事情:

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)))

现在您可以轻松计算平均值

© www.soinside.com 2019 - 2024. All rights reserved.