2016-12-17 10 views
3

私はSpark + Scalaを学習していますが、この問題が残っています。私には2つのことがあります。Scala spark rddファイルのペアで一致するようにする

scala> val text = sc.textFile("hdfs://master:9000/data/words.txt") 
text: org.apache.spark.rdd.RDD[String] = hdfs://master:9000/data/words.txt MapPartitionsRDD[1] at textFile at <console>:24 

scala> text.take(2) 
res0: Array[String] = Array("a b c d ", "e r t y u i o p ") 

そして、私は(私は、例えば2最初の行をお見せし)頻繁に言葉の「組み合わせ」変数表すペアを持っている:多くの単語が含まれている1つのファイルが(私は、例えば2つの最初の行をお見せし):

scala> val combinations = l.cartesian(l).filter{case(x,y) => x < y} 
combinations: org.apache.spark.rdd.RDD[(String, String)] = MapPartitionsRDD[9] at filter at <console>:32 

scala> combinations.take(2) 
res1: Array[(String, String)] = Array((a,b), (a,c)) 

「テキスト」変数の各行から組み合わせペアを作成して、「組み合わせ」変数ペアと一致させたいとします。

例えば、入力テキストの最初の行で、私が持っているしたいと思います:

(a,b) (a,c) (a,d) (b,c) (b,d) (c,d) 

私は「組み合わせ」変数

でそれらを一致させることができるように助けてください!これは私を夢中にさせている。ありがとう、

答えて

4

私が正しく理解した場合、各エントリに含まれる文字の組み合わせをtextにしたいと考えています。たとえば:

"a b c d " => (a,b) (a,c) (a,d) (b,c) (b,d) (c,d) 

私たちは、このScalaのコレクションAPIを使用して行うことができます。

val textCombinations = text.map(t => t.split(" ").combinations(2).toList) 
+0

ハローmaasgを、あなたのコードが良いように見えるが、私は持っている: – Bebec

+0

スカーラ> textCombinations.take(10).foreach (println) 16/12/17 11:45:42エラーexecutor.Executor:ステージ5.0のタスク0.0(TID 5)の例外 java.io.NotSerializableException:scala.collection.SeqLike $ CombinationsItr シリアライゼーションスタック:.. 。 – Bebec

+0

@Bebecわかりました。それを '.toSeq'の代わりに' .combinations(2).toList'にしてください。 'toSeq'実装のデフォルトは' 'Stream''です。これは直列化できません。私も答えを更新しました。 – maasg

関連する問題