我有一个数据集,我将从文件中读取该数据集,
1 2 3 4 5:9:3 2 1 2 1
2 3 5:4:1 2 1
4 5:3:1 2
我试图将它们与每一行分开,然后使用冒号
的左侧部分和相应的冒号
的右侧部分创建一个键/值。例如,在第一行中,1
与 3
映射为 (1,3)
和 2
与 2
映射为 (2,2)
。同样,第一行将有 (3,1), (4,2), (5,1)
。同样,它应该生成第二行和第三行。
到目前为止,我已尝试使用映射函数分割每一行,然后尝试通过将每个左侧部分项与相应的右侧部分值映射来创建元组。
到目前为止的代码:
JavaRDD<List<String>> transactions = data.map(
new Function<String, List<String>>() {
public List<String> call(String line) {
String[] parts = line.split(" ");
return Arrays.asList(parts);
}
}
);
JavaPairRDD<String, Integer> ones = transactions.mapToPair(
new PairFunction<List<String>, String, Integer>() {
public Tuple2<String, Integer> call(List<String> w) {
return new Tuple2<String, Integer>....;
}
});
我对返回部分感到震惊。有什么方法可以获取所有键/值对吗?
PS:我是 apache Spark 的新手。
最佳答案
您可以使用flatmap相对更优雅的解决方案:
val res = dataset.flatMap(line => {
val f = line.split(":", -1) //taking care of the empty values with -1
val keys = f(0).split(" ", -1)
val values = f(2).split(" ", -1)
keys.zip(values) //List[(String, String)], (key, value) pairs for a line
})
res.collect.map(println)
(1,3)
(2,2)
(3,1)
(4,2)
(5,1)
(2,1)
(3,2)
(5,1)
(4,1)
(5,2)
关于java - Java中spark实现中映射形成键/值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40982668/