package dstream.spark.examples; import java.util.List; import java.util.Map.Entry; import java.util.concurrent.Future; import java.util.stream.Stream; import io.dstream.DStream; import io.dstream.utils.ExecutionResultUtils; import io.dstream.utils.Tuples.Tuple3; public class Join { public static void main(String... args) throws Exception { DStream<String> one = DStream.ofType(String.class, "one").classify(s -> s.split("\\s+")[0]); DStream<String> two = DStream.ofType(String.class, "two").classify(s -> s.split("\\s+")[2]); DStream<String> three = DStream.ofType(String.class, "three").classify(s -> s.split("\\s+")[0]); Future<Stream<Stream<Entry<String, List<Tuple3<String, String, String>>>>>> resultFuture = one .join(two).on(t2 -> t2._1().split("\\s+")[0].equals(t2._2().split("\\s+")[2])) .join(three).on(t3 -> t3._1().split("\\s+")[0].equals(t3._3().split("\\s+")[0])) .aggregateValues(t3 -> t3._1().split("\\s+")[0], t3 -> t3) .executeAs("Join"); Stream<Stream<Entry<String, List<Tuple3<String, String, String>>>>> resultPartitionsStream = resultFuture.get(); ExecutionResultUtils.printResults(resultPartitionsStream, true); } }