2017-04-27 73 views
0

我是Spark和Spark流媒體新手,剛剛完成我的第一步。我似乎並不真正瞭解如何使其運作。如何從JavaPairDstream中提取列表?

我有一個包含Tuple2<Integer,List<Integer>>的JavaPairDstream。第一個整數是傳感器ID,列表是傳感器讀數。 我需要提取列表元素,以便可以計算傳感器讀數的平均值。

我試圖使用foreachRDD,但它沒有爲我工作。有人可以發佈代碼片段,僞代碼或一些指導如何做到這一點? Java 8代碼也將被讚賞。

謝謝

蓋伊

回答

0

看來你想使用Scala的flatMapValues

僞代碼,但它會非常類似於Java的:

val dStream = ... 
val flatten = dStream.flatMapValues(list => list) 

對於每個鍵你會在輸入列表中每一個元素有一行,那麼你可以使用減少來計算總和,平均和其他指標

例如

Input: 
key = 1, value = [1, 2, 3] 
Output: 
key = 1, value = 1 
key = 1, value = 2 
key = 1, value = 3