2017-10-13 3 views
1

ここは例です。Sparkに単語を追加する良い方法はありますか?

のDataSet - dataset.txt

1 banana kiwi orange melon

コード

scala> val table = sc.textFile("dataset.txt").map(_.split(" ")) 

scala> table.take(1) 

res0: Array[Array[String]] = Array(Array(1, banana , kiwi , orange, melon)) 

scala> val pairSet = table.map{case Array(key,b,k,o,m) => (key, b+" "+k+" "+o+" "+m)} 

scala> pairSet.take(1) 

res1: Array[(String, String)] = Array((1, banana kiwi orange melon)) 

pairSetに値を追加する部分が効率的である場合、私は疑問に思います。それとも良い方法がありますか?

答えて

1

&最初に分割することができます。key & valueです。

val table = sc.textFile("dataset.txt").map { x => 
    val splits = x.split(" ",2) 
    (splits(0), splits(1)) 
} 
+0

ありがとうございました! あなたのメソッドは '(' '+ + +" + + "+" + "+" + " + m) '? –

+0

はい、あなたのケースでは、最初のオカレンスを除いて残りの文字列を不必要に分割しているため、後でそれらを再度追加するだけです。 – vdep

+0

ああああ!ご清聴ありがとうございました! –

1

ロジックのアプローチは、配列のデータ量が常に同じである場合にのみ有効です。これを試すこともできます。

val table = sc.textFile("dataset.txt") 
val pairedDF = table.map{ line => 
         val array = line.split(" ", 2) 
         (array(0), array(1)) 
         } 

これを使用することで、分割後に配列を固定サイズに制限することはありません。

これはうまく機能します。

ありがとうございました

+0

お返事ありがとうございます!あなたのメソッド '(val array = line.split(" "、2) (array(0)、array(1)))は私のメソッドより効率的です(b +" "+ k +" "+ o +" " + m) '? –

+0

[ループ]は最初のスペースを取得した後で値の分割を停止するためです。 –

+1

あああ!ご清聴ありがとうございました! –

関連する問題