Apache spark ApacheSpark可以将几个类似的行合并成一行吗?

Apache spark ApacheSpark可以将几个类似的行合并成一行吗?,apache-spark,spark-streaming,Apache Spark,Spark Streaming,我对ApacheSpark非常陌生,所以,如果我的问题看起来很幼稚,我很抱歉,但我在互联网上没有找到一个明确的答案 以下是我的问题的背景:我想从ApacheKafka服务器检索json输入数据。格式如下: {"deviceName":"device1", "counter":125} {"deviceName":"device1", "counter":125} {"deviceName":"device2", "counter":88} {"deviceName":"device1", "co

我对ApacheSpark非常陌生,所以,如果我的问题看起来很幼稚,我很抱歉,但我在互联网上没有找到一个明确的答案

以下是我的问题的背景:我想从ApacheKafka服务器检索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或Spark Streaming,我希望处理这些数据并获得以下格式的输出:

{"deviceName":"device1", "counter":125, "nbOfTimes":4}
{"deviceName":"device2", "counter":88, "nbOfTimes":2}
{"deviceName":"device3", "counter":999, "nbOfTimes":2}
所以,我想知道我正在寻找的东西是否可以通过Spark实现。如果是的话,你能给我一些指导吗?我会非常感激的


Joe

这可以通过Spark和Spark流媒体来完成。但是让我们考虑一个包含数据的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|
// +----------+-------+---------+

很明显,以后您可以将其写入任何格式。但是我想你已经明白了主要的意思。

你知道如何使用spark streaming来实现吗?有什么想法吗?在java中,spark streaming也会遵循同样的想法。但您只是在微批量RDD上操作。我不明白这有什么用。