Spark:将JavaRDD<Tuple2>转换为JavaPairRDD<>

13
我有一个 JavaRDD<Tuple2<String, String>>,需要将其转换为 JavaPairRDD<String, String>。目前我只是编写一个 map 函数,将输入元组原样返回来进行转换。但我想知道是否有更好的方法?

好的,那么在Java中没有更好的方法了,对吧? - YuliaSh.
2
new JavaPairRDD(javaRdd) ? - maasg
也许吧,我终于找到了PairJavaRDD.fromJavaRDD(rdd)。 - YuliaSh.
如果您正在构建JavaRDD <Tuple2 <String,String>>,例如从JavaPairRDD的映射转换中,您可以改为调用mapToPair,并避免首先使用JavaRDD。 - vefthym
5个回答

14

JavaPairRDD.fromJavaRDD(rdd)是其中一种解决方案


JavaRDD<SmartBuildingNew> buildingRDD = jsc.sparkContext().parallelize(listSmartBuilding); 我想遍历这个 JavaRDD,你能帮我吗? SmartBuildingNew 是一个 POJO 类。jsc 是 JavaStreamingContext 对象。 - Anshul Kalra

4

对于反向转换,似乎这样可以达到目的:

JavaRDD.fromRDD(JavaPairRDD.toRDD(rdd), rdd.classTag());

2

试试这个例子:

JavaRDD<Tuple2<Integer, String>> mutate = mutateFunction(rdd_world); //goes to a method that generates the RDD with a Tuple2 from a rdd_world RDD
JavaPairRDD<Integer,  String> pairs = JavaPairRDD.fromJavaRDD(mutate);

2

尝试将JavaRDD转换为JavaPairRDD,对我来说它完美地工作。

JavaRDD<Sensor> sensorRdd = lines.map(new SensorData()).cache();
// transform data into javaPairRdd
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;
    }
});

1

或者您可以在org.apache.spark.api.java.JavaRDD实例上调用mapToPair(..)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接