Java / Spark – Printing RDDs from Spark Streaming

A common challenge when writing functional code in Spark is to simply output logs as we usually do it in ordinary applications where line for line is processed sequentially and a debug message could be printed at an arbitrary place using System.out.println(). Working with Spark’s RDDs is new to most of us and might be confusing at first since it is difficult to track what object type we are currently working with (is it a RDDStream, an RDD or a simple type like String or int) – but infact this tracking is important. If you make use of the print function that is offered by RDDs or RDDStreams you’ll just see more or less useless array like information in the console instead of the objects’ content.

What I commonly do is to resolve the RDD object down to a simple JavaRDD or JavaDStream<object> using e.g. flatmap(x -> x) to flatten streams or lists in a dataset or map() to break down complex objects to a simple data type (e.g. via map(person -> person.getAddress().getStreet())). On RDDs you can then do a foreach(System.out::println). On JavaDStream you can do the following:

public static void printRDD(final JavaRDD<String> s) {
  s.foreach(System.out::println);
}
 
public static void main(final String[] args) {
  SparkConf conf = new SparkConf().setMaster("local[*]").setAppName("testApp");
  try (JavaStreamingContext sc = new JavaStreamingContext(conf, new Duration(5000))) {
    JavaDStream<String> stream = sc.textFileStream("C:/testnumbers/");
    stream.foreachRDD(Main::printRDD);
    sc.start();
    sc.awaitTermination();
  }
}

Here, I simply break down a JavaDStream to an RDD using foreachRDD() and use System.out::println as method reference to print each RDDs content.

500€ bei Paypal gewonnen… oder doch nicht?

Gerade habe ich folgende Mail von Paypal bekommen.

 

 

 

 

 

 

 

Ich habe also 500€ gewonnen! Wow! Derartigen Spam erkennt man ja recht schnell an irgendwelchen haarsträubenden Bedingungen mit die mit dem angeblichen Gewinn einhergehen, aber hier sind diese nirgends zu finden. Außerdem sagt ja der Satz “Sie können Ihren Gewinn ab sofort einlösen” eigentlich aus, dass ich tatsächlich 500€ gewonnen hätte. Außerdem hat Paypal mir das Geld angeblich schon aufs Konto geschickt (“Denn dort haben wir Ihnen die 500€ gutgeschrieben.”). Gleich mal nachgeschaut – nichts. Welche Überraschung! Interessanterweise ist sogar die offizielle Hotline besetzt, ob da wohl noch mehr Leute anrufen und fragen wollen wo denn ihr Gewinn abgeblieben ist?

Liebes Marketing-Team von Paypal. Seid ihr schon so verzweifelt, dass keiner mehr eure tollen Werbeangebote, die ihr alle 2 Tage per Mail rumschickt, anschaut, dass ihr schon mit solchen Aktionen für Aufmerksamkeit sorgen müsst? Verdient ihr denn noch nicht genug über eure recht hohen Verkaufsprovisionen?

Eigentlich bin ich ja gegen derartige Posts, aber da es zu der Mail noch nichts im Netz zu finden gibt, muss ja einer mal den Anfang machen und ein bisschen was darüber schreiben. Sonst geht das noch ewig so weiter 🙂

P.S. Achso, könnte natürlich auch eine Fishing-Mail sein. Allerdings stimmt das Zertifikat der verlinkten Seiten mit dem von Paypal überein.