2016-04-05 195 views
0

我有文件的流,並且每個文件包含的關鍵組成線分離的線的鍵和值:例如值 ,一個文件將是這樣的:使用火花流

key1:value1 
key2:value2 
key3:value3 

因此,我m使用Spark Streaming來檢測文件到達HDFS,我需要做的是將這些行的每個值放入HBase中(HBase的列由鍵組成) 如果行的類型是「字符串「鍵與值分離會很容易,但我有一個DStream [字符串],如果我申請DStream.flatmap(_。split(」:「))我會得到的話,我將無法要做:

val separated = String.split(":") 
val key = separated(0) 
val value = separated(1) 

我嘗試使用.ToString將DStream轉換爲字符串,當我使用spark-submit執行腳本時出現錯誤「ArrayOutOfBoundException」。

回答

1
val rdd = sc.parallelize(Seq("key1:value1", "key2:value2")) 

rdd.map(_.split(":")).collect 
// Array[Array[String]] = Array(Array(key1, value1), Array(key2, value2)) 

rdd.map(_.split(":")(0)).collect 
// Array[String] = Array(key1, key2) 
+0

謝謝你的回答,但在我的情況下,該文件包含數百行的鍵值類型,不會使用collect使它太大而不易於操作? – Jean

+0

我只是向你展示'collect'的答案。把'collect'關掉 - 你有一個'RDD'結構化你想要的方式。 –

+0

它的工作謝謝你 – Jean