2016-04-05 8 views
0

ストリーミングスパークを使用してラインにキーと値の分離:ので、私は」は、私は、ファイルのストリームがあり、各ファイルは、キーで構成される行が含まれてい

key1:value1 
key2:value2 
key3:value3 

:値 は、たとえば、ファイルは次のようになります私はSpark Streamingを使ってファイルの到着をHDFSに検出し、これらの行の各値をHBaseに入れます(HBaseの列はキーで構成されています) 行のタイプが " DStream.flatmap(_。split( ":"))を適用すると、キーを値から分離することは簡単ですが、DStream [String]です。行うこと:

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

私はspark-submitを使用してスクリプトを実行すると、DStreamを.ToStringを使用してStringに変換しようとしましたが、エラー "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

私の場合、ファイルには数百行のキー:値タイプが含まれていますが、それを簡単に操作するには大きすぎますか? – Jean

+0

私はちょうど答えを 'collect'であなたに見せています。 'collect'を取り除く - あなたはあなたが望むように構造化された' RDD'を持っています。 –

+0

ありがとうございました – Jean

関連する問題