2016-08-02 18 views
1

我對Apache Spark非常陌生,因此,如果我的問題看起來很天真,但是我沒有在互聯網上找到明確的答案,我非常抱歉。Apache Spark可以將幾條相似的行合併爲一行嗎?

這是我的問題的上下文:我想從Apache Kafka服務器檢索json輸入數據。格式如下:

{"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} 

火花或Spark流,我想處理這些數據,並獲得作爲輸出的格式如下:

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

所以,我想知道,如果我正在尋找的是可能的Spark。如果是的話,你可以給我一些指導嗎?我會很感激。

Joe

回答

2

它可以用Spark和Spark Streaming完成。但讓我們考慮第一個包含數據的json文件的情況。

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| 
// +----------+-------+---------+ 

很明顯,你可以把它寫成你以後想要的任何格式。但我認爲你有主要想法。

+0

你有什麼想法可以用火花流來完成嗎? –

+0

有關它的任何想法,並在Java? –

+0

spark-streaming將遵循相同的想法。但是你只是在微批RDD上操作。我看不出有什麼用處。 – eliasah