2016-03-26 24 views
0

私は2つのファイルを持っています.1つは要約(csvファイルから抽出された多くの行を含んでいます)と他のものはcsvファイルの行にあります。私は両方のファイルを読み込み、各1の配列[文字列]を得た:単語辞書からの単語の抽出

val summary: Array[String] = ... 
val wordList: Array[String] = ... 

各行についてsummaryで、私もwordListに存在する単語のリストを抽出したい、

サンプル・データsummary中:wordList

hi how are you 
I am good.how about you. 
I would like to have tea. 

サンプルデータ:

good 
tea 
you 
like 

期待される結果:

import scala.collection.mutable.ArrayBuffer 

val results = summary.map(l => { 
    var result = ArrayBuffer[String](); 
    wordList.foreach(w => {if (l.contains(w)) result.append(w)}); 
    result.toArray.mkString(",") 
}).filter(l => l.length > 0) 
+0

なぜcsvを直接データフレームにインポートしないでください。 https://github.com/databricks/spark-csv – ulrich

+1

これは明らかに割り当てです。あなたが試したことと、あなたがどこにこだわっているのかを見せてくれれば最高です。また、あなたはSparkでタグ付けしましたが、Arraysは本当にRDDですか? –

+1

それはまた、私が忘れてしまったことを含むいくつかの他の質問の複製です... –

答えて

0

誰かが指摘するように、あなたは、Sparkは必要ありません。私はあなたのコードを試したときに、RDDがRDDを含んでいないと言って最初にエラーを出していました。したがって、worlistをブロードキャストしてコードを修正し、コード内のブロードキャストされた変数を使用します。

val broadcast_wordList=sc.broadcast(wordList) 

val results = summary_arraylist.map {l=> 
val result = ArrayBuffer[String](); 
broadcast_wordList.value.foreach(w=> {if(l.contains(w)) result.append(w)}); 
result.toArray.mkString(",") 
} 

私はすべての行、つまり空白の行(一致する部分がない場合もあります)が必要なので、コードから「フィルタ」を削除しました。 しかし、まだ、私は出力として空の配列を取得しています。ここで

が出力されます。

enter image description here。ここで

+0

空アレイを取得しています:(助けてください –

-1

@デビッド・グリフィン:

you 
good,you 
like,tea 
0

が最終的な答えですが、私は考え出し:

ヴァルbroadcast_wordList = sc.broadcast(wordListに)

デフ連結(SS:文字列*)= SSフィルタ(_.nonEmpty)mkString」、 "

val results_part1 = summary_arraylist。配分は、(1).MAP {L =>

VAR T = broadcast_wordList.value.map(=>(l.contains(W)の場合){W}他{ ""} W)

プリント( L)

VARのTT = t.filter(LL => ll.length> 0).toArray.mkString( "|")

連結(L、TT)

}

関連する問題