Search code examples
javaapache-sparkspark-streaming

Convert JavaPairDStream<String, Integer> to JavaPairDStream<Integer, String>, switching values in tuple (Java Spark)


I thought I could just do

final JavaPairDstream<String, Integer> y = ... ;

final JavaPairDStream<Integer, String> x =
                    y.mapToPair(item -> {
        return new JavaPairDStream<Integer, String>(item[1], item[0]);
    });

But it gives me the error:

array required, but scala.Tuple2<java.lang.String,java.lang.Integer> found

How can I switch the order?


Solution

  • Your function is returning the wrong type. It's mapToPair that returns a JavaPairDStream<Integer, String>, your function returns Tuple2<Integer, String> objects that make the stream.

    So your statement should be:

    final JavaPairDStream<Integer, String> x = 
                 y.mapToPair(item -> new Tuple2<>(item._2, item._1));