所有类似问题的现有答案都在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的内容。
答案 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])])