2016-08-02 30 views
1

Ich bin total neu mit Apache Spark, daher tut es mir sehr leid, wenn meine Frage naiv scheint, aber ich habe keine klare Antwort im Internet gefunden.Kann Apache Spark mehrere ähnliche Zeilen in einer Zeile zusammenführen?

Hier ist der Kontext meines Problems: Ich möchte JSON-Eingabedaten von einem Apache Kafka-Server abrufen. Das Format ist wie folgt:

{"deviceName":"device1", "counter":125} 
{"deviceName":"device1", "counter":125} 
{"deviceName":"device2", "counter":88} 
{"deviceName":"device1", "counter":125} 
{"deviceName":"device2", "counter":88} 
{"deviceName":"device1", "counter":125} 
{"deviceName":"device3", "counter":999} 
{"deviceName":"device3", "counter":999} 

Mit Funken oder mit Streaming-Funken, ich mag diese Daten verarbeiten und als Ausgang das folgende Format zu erhalten:

{"deviceName":"device1", "counter":125, "nbOfTimes":4} 
{"deviceName":"device2", "counter":88, "nbOfTimes":2} 
{"deviceName":"device3", "counter":999, "nbOfTimes":2} 

Also, ich würde gerne wissen, ob Was ich suche, ist mit Spark möglich. Und wenn ja, kannst du mir eine Anleitung geben? Ich wäre so dankbar.

Joe

Antwort

2

Es kann mit Funken und Funken Streaming erfolgen. Aber betrachten wir den ersten Fall mit einer JSON-Datei, die Ihre Daten enthält.

val df = sqlContext.read.format("json").load("text.json") 
// df: org.apache.spark.sql.DataFrame = [counter: bigint, deviceName: string]  

df.show 
// +-------+----------+ 
// |counter|deviceName| 
// +-------+----------+ 
// | 125| device1| 
// | 125| device1| 
// |  88| device2| 
// | 125| device1| 
// |  88| device2| 
// | 125| device1| 
// | 999| device3| 
// | 999| device3| 
// +-------+----------+ 

df.groupBy("deviceName","counter").count.toDF("deviceName","counter","nbOfTimes").show 
// +----------+-------+---------+             
// |deviceName|counter|nbOfTimes| 
// +----------+-------+---------+ 
// | device1| 125|  4| 
// | device2|  88|  2| 
// | device3| 999|  2| 
// +----------+-------+---------+ 

Offensichtlich können Sie es zu irgendeinem Format schreiben, das Sie später wünschen. Aber ich denke, dass Sie die Hauptidee bekommen.

+0

Haben Sie eine Idee, wie es mit Spark-Streaming gemacht werden kann? –

+0

keine Ahnung, und in Java? –

+0

Funken-Streaming wird der gleichen Idee folgen. Aber Sie arbeiten nur mit Mikro-RDDs. Ich sehe nicht, wie das nützlich sein kann. – eliasah