2017-05-05 3 views
3

スカラを使って共存語を計算したい。 しかし、私はいくつかの問題に遭遇します。スカラを使ってsparkを使って共起項を計算する

これは私のコードです:

val path = "pg100.txt" 
val words = sc.textFile(path).map(_.toLowerCase.split("[\\s*$&#/\"'\\,.:;?!\\[\\](){}<>~\\-_]+").map(_.trim).sorted) 
val coTerm = words.map{ line => 
    for{ 
     i <-0 until line.length 
     j <- (i+1) until line.length 
    } { 
     ((line(i), line(j)), 1) 
    }} 

予想される出力は次のようになります。

coTerm.collect 
res48: Array[Unit] = Array(((word1, word2), 1), ((word1, word3), 1), ((word2, word3), 1)... 

しかし、私の出力は以下の通りです:

coTerm.collect 
res51: Array[Unit] = Array((),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),(),().... 

なぜ私ができる私にはわかりません.mapのprintln関数を使用して単語のペアを出力しますが、出力は出せません。

答えて

2

原因は実際にはあなたからのレコードを返さないということですmap

使用yield以下に示すようにforでレコードを返すために:

val coTerm = words.map{ line => 
for{ 
    i <-0 until line.length 
    j <- (i+1) until line.length 
} yield { 
    ((line(i), line(j)), 1) 
}} 
+0

おかげで、それは働きます! – Chenson

関連する問題