2015-11-05 44 views
0

给定的输入RDD或形式如何映射每行获得多输出RDD

1: 6 7 
2: 5 

我怎样才能形式的另一个RDD

1 6 
1 7 
2 5 

等..

+0

这仍然不能告诉我们输入是什么样的数据结构,以及你如何处理它。例如,它是一个字典(什么是键和值)?或者它是一个文本文件?或者它是一个字符串?或... – inspectorG4dget

+0

它实际上是一个RDD。但是字典的逻辑也可以适用于RDD – mhn

+0

[flatMap引发错误-unicode项可能有重复项没有属性flatMap](http://stackoverflow.com/questions/33540559/flatmap-throws-error-unicode -item-does-not-have-attribute-flatmap) – zero323

回答

1

如果我假设你的初始输入是在一个文本文件中,那么你可以调用两个这样的地图函数:

data = sc.textFile("textfile_location") 
data = data.map(lambda line: (line.split(":")[0], line.split(":")[1].split())) 
data = data.flatMap(lambda key, values: [(key, value) for value in values]) 
1

我对RDD的工作原理并不十分清楚,但你说它可以变成dict。所以我们可以说,你有以下字典:

d = {1: [6, 7], 2: [5]} 

而且假设你想写一个信息到一个文件:

1 6 
1 7 
2 5 

这是可以实现如下:

with open('path/to/output', 'w') as outfile: 
    for k in sorted(d): 
     for v in d[k]: 
      outfile.write("{}\t{}\n".format(k, v)) 
+0

可以使用lambda表达式来完成 – mhn

+0

@mhn:使用lambda表达式可以做什么?我想要用lambda替换哪部分代码? – inspectorG4dget