如何在Python中将[String,String]类型的RDD转换为[Int,Int]类型的RDD?

时间:2019-07-26 09:04:12

标签: python apache-spark pyspark

所有类似问题的现有答案都在Scala中,但我使用的是python。

具体地说,我正在尝试将['1,-1', '2,-2']转换为[[1,-1],[2,-2]]

myrdd.map(lambda x: x.split(',')).map(lambda x: int(x[0]),int(x[1]))给我错误。

编辑:我正在使用RDD。该示例说明了RDD的内容。

4 个答案:

答案 0 :(得分:0)

尝试一下:

lista=['1,-1', '2,-2'] 

final_list=[ [int(i[:i.find(',')]), int(i[i.find(',')+1:])] for i in lista ]
            #add the first integer  #add the second integer #, both inside a list, for every item in lista 
print(final_list)

输出:

[[1, -1], [2, -2]]

编辑:显然,此解决方案仅适用于列表,但这只是我目前所知道的。

答案 1 :(得分:0)

通过split解析数据中的每个元素,并应用lambda转换为int

data = ['1,-1', '2,-2']
result = [map(lambda i: int(i), element.split(",")) for element in data]
#[[1, -1], [2, -2]]

编辑:

data = RDDstuff
result = [data.flatMapmap(lambda i: int(i), element.split(",")))]

答案 2 :(得分:0)

您的错误来自以下事实:在上一个map中,您没有在lambda函数中返回元组。相反,int(x[1])充当map方法的第二个参数。这就是为什么您获得NameError: name 'x' is not defined

myrdd = sc.parallelize(['1,-1', '2,-2'])
myrdd2 = myrdd.map(lambda x: x.split(','))
myrdd3 = myrdd2.map(lambda x: [int(x[0]), int(x[1])])
print(myrdd3.take(2))

[[1, -1], [2, -2]]

答案 3 :(得分:0)

您可能已经在此处发布了错误消息。我相信是

  

NameError:未定义名称'x'

这来自第二个lambda中的语法错误。您必须返回列表或教堂:

myrdd.map(lambda x: x.split(',')).map(lambda x: [int(x[0]),int(x[1])])
相关问题