假设我的字符串的RDD为:
inputRDD=sc.parallelize('2596,51,3,258,0,510,221,232,148,6279,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,5')
我想将此RDD转换为:
inputRDD= [2596, 51, 3,.....]
我实现了以下代码:
inputRDD.flatMap(lambda line: line.split(',')).collect()
但是得到的输出为:
['2',
'5',
'9',
'6',
'',
'',
'5',
'1',
'',
'',
'3',
'',
'',
'2',
'5',
'8',
'',
'',
'0',
'',
'',
'5',
'1',
'0',
'',....]
我可以知道我的代码在哪里出问题吗?
答案 0 :(得分:1)
问题实际上在于RDD的创建。您需要做的就是将输入数据包装在parallelize
方法的列表中,如下所示:
inputRDD=sc.parallelize(['2596,51,3,258,0,510,221,232,148,6279,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,0,0,0,0,0,0,5'])
其余代码将正常运行,然后按预期运行。
之前发生的事情是Spark将每个字符视为一个单独的列表元素,即每个字符都增加了一个新行。