2016-11-17 2 views
1

Ich habe eine Liste von Wörtern als DStream. ZB: Liste (Auto, Geschwindigkeit, Unfall, Geschwindigkeit, schlecht). Ich möchte Bi-Gramm aus dieser Liste bilden. Ich habe dies mit RDDs, habe aber Probleme mit DStreams. Ich verwende die ForeachRDD-Funktion. Unten ist, was ich habe -Listenverarbeitung in DStream

Ich versuche, den Inhalt von RDD nach der Umwandlung zu drucken.

Gibt es eine Möglichkeit, den Inhalt nach der Transformationsfunktion printRDD anzuzeigen. Auch wenn ich println (z) innerhalb der Druckdefinition verwende, wird MapPartitionsRDD [18] auf flatMap zurückgegeben. Ich benutze Kafka Spark-Streaming, um Eingaben zu lesen, ich bekomme den Wortwert auf der Konsole. Ich denke, die Wörter werden nach dem Aufruf der Funktion printRDD nicht verändert.

+0

was sollte nach der Stream-Verarbeitung mit den Bigrammen passieren? Diese Funktion dient nur zum Drucken von Konsolen. – maasg

Antwort

1

Sie können auf den DStream all diesen Betrieb tun, nicht in foreachRDD und rufen dann print auf den DStream:

lines 
    .map(plainTextToLemmas(_, stopWords)) 
    .flatMap(y => y.toString.split(",")) 
    .map(y => y.toString.split(",").filter(_.nonEmpty)) 
    .map(y => y.replaceAll("""\W""", "").toLowerCase) 
    .filter(_.nonEmpty) 
    .sliding(2) 
    .filter(_.size == 2) 
    .flatMap { case Array(a, b) => ((a, b), 1) } 
    .print() 

Diese aus dem Inhalt der DStream an die Konsole auf dem Treiber gedruckt werden soll.

Eine wichtige Sache zu beachten ist, dass obwohl Sie auf einem DStream sind arbeitet, ist es Methoden „Bohrer in“ die RDD bei der gegebenen Chargenzeit zugrunde liegen und setzen den tatsächlichen Typ innerhalb des RDD, so dass Sie nicht brauchen, sollten Verwenden Sie foreachRDD, um die tatsächlichen Daten zu erreichen.

Verwandte Themen