我打印时有一个JavaRDD,我的数据看起来像这样 [[字符串1,字符串,STRING3],[串,4],[STRING5,String6],[String7,String8,String9]]
每个String又是一个管道分隔的字符串。我可以拆分每个字符串以形成一个键和值。
如何将此RDD转换为JavaPairRDD?
答案 0 :(得分:1)
假设您在List_0: ["sub10~sub11~sub12","sub20~sub21~sub22","sub30~sub31~sub32"]
List_1: ["sub40~sub41~sub42"]
中有这样的数据:
~
|
是分隔符。
您希望展开列表并将第一个和第三个子字符串分组,并将JavaPairRDD<String,String>
作为每个输入字符串的键,然后将对存储在key: "sub10|sub12" value: "sub10~sub11~sub12"
中:
flatMap
您可以使用mapToPair
然后使用rdd.flatMap(new FlatMapFunction<List<String>,String>() {
public Iterable<String> call(List<String> li) throws Exception {
return li;
}
}).mapToPair(new PairFunction<String,String,String>() {
public Tuple2<String, String> call(String s) throws Exception {
String[] ss = s.split("~");
return new Tuple2<String,String>(ss[0] + "|" + ss[2], s);
}
});
来实现此目的:
class MyView extends View
答案 1 :(得分:0)
Follow below code snippet for transforming JavaRDD<K> into JavaPairRDD<K,V>
JavaPairRDD<Integer, Sensor> deviceRdd = sensorRdd.mapToPair(new PairFunction<Sensor, Integer, Sensor>() {
public Tuple2<Integer, Sensor> call(Sensor sensor) throws Exception {
Tuple2<Integer, Sensor> tuple = new Tuple2<Integer, Sensor>(Integer.parseInt(sensor.getsId().trim()), sensor);
return tuple;
}
});