在 Java 中的 spark 实现中映射以形成 key/value 对
Map to form key/value pair in spark implementation in Java
我有一个数据集,我将从文件中读取它,
1 2 3 4 5:9:3 2 1 2 1
2 3 5:4:1 2 1
4 5:3:1 2
我试图将它们拆分成每一行,然后用 colon
的左侧部分和 colon
的相应右侧部分创建一个 key/value。例如,在第一行中,1
与 3
映射为 (1,3)
,2
与 2
映射为 (2,2)
。同样,第一行会有 (3,1), (4,2), (5,1)
。同样,它应该生成第 2 行和第 3 行。
到目前为止,我已经尝试使用 map 函数拆分每一行,然后我尝试通过将每个左侧部分项目映射到相应的右侧部分值来创建元组。
到目前为止的代码:
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>....;
}
});
我对 return 部分感到震惊。有什么办法可以得到所有 key/value 对吗?
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)
我有一个数据集,我将从文件中读取它,
1 2 3 4 5:9:3 2 1 2 1
2 3 5:4:1 2 1
4 5:3:1 2
我试图将它们拆分成每一行,然后用 colon
的左侧部分和 colon
的相应右侧部分创建一个 key/value。例如,在第一行中,1
与 3
映射为 (1,3)
,2
与 2
映射为 (2,2)
。同样,第一行会有 (3,1), (4,2), (5,1)
。同样,它应该生成第 2 行和第 3 行。
到目前为止,我已经尝试使用 map 函数拆分每一行,然后我尝试通过将每个左侧部分项目映射到相应的右侧部分值来创建元组。
到目前为止的代码:
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>....;
}
});
我对 return 部分感到震惊。有什么办法可以得到所有 key/value 对吗?
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)