2016-03-22 10 views
0

einen Strom von SparkFlumeEvents Given (oder sagen, jede DSTREAM) Wie funktioniert eine Karte zu einem geeigneten Schema, so dass der Strom mitSpark-Streaming-Schema

zu Cassandra gespeichert werden können
stream.saveToCassandra(keyspace,table) 

ein naiver Versuch, beschwert sich über fehlende Spalten .

Ist der beste Ansatz zu stream.map() zu einem gegebenen Objekt (was schwerfällig erscheint)?

OR ...

ein anderer Ansatz scheint stream.foreachRDD zu verwenden und irgendwie an einen Datenrahmen zuordnen. Das erscheint auch umständlich, da die Stream-Methode das direkte Speichern von cassandra unterstützt.

Also, was ist der richtige Weg?

Antwort

0

Streams werden in Cassandra mithilfe des Spark-Cassandra-Connectors gespeichert, indem Schlüsselbereich, Tabellenname und einzufügende Spalten angegeben werden. Der andere Ansatz besteht darin, Daten zu UDTs zuzuordnen und diese in die Datenbank einzufügen. Ich bevorzuge die Angabe von Spalten als den schnellsten Weg, wenn Sie nur Daten einfügen müssen. Beispiel aus Dokumentation macht genau die gleiche, aber Sie irgendeine Variante davon verwenden können:

val wc = stream.flatMap(_.split("\\s+")) 
    .map(x => (x, 1)) 
    .reduceByKey(_ + _) 
    .saveToCassandra("streaming_test", "words", SomeColumns("word", "count")) 
+0

tut Ihr Code übernimmt jedoch, dass der ankommende Streaming die richtigen Spalten hat - ich diesen Ansatz in der Dokumentation gesehen habe, aber meine Hauptfrage ist mehr um die Idee von Transformationen und Mapping-Schema - zum Beispiel muss ich möglicherweise die Bytes eines Streams in einer benutzerdefinierten Weise deserialisieren oder eine Spaltenzuordnung durchführen. Ich frage mich, was ist der sauberste Weg, um diese Mappings/Decoder zu spezifizieren? – ismisesisko