使用拆分功能将字符串的RDD转换为字符元素

时间:2019-08-04 07:42:07

标签: apache-spark rdd

假设我的字符串的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',
 '',....]  

我可以知道我的代码在哪里出问题吗?

1 个答案:

答案 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将每个字符视为一个单独的列表元素,即每个字符都增加了一个新行。