2017-04-23 7 views
0

2つのSpark SQLデータフレームABがあるとします。私はAから重複を保ちながらAの項目からBの項目を差し引きたいと思います。スパーク:データフレームを引きますが、重複した値を保持します

別のStackOverflow質問("Spark: subtract two DataFrames")で見つかったDataFrame.except()を使用するよう指示がありましたが、その機能は元のデータフレームAからすべての重複を削除します。概念的な一例として

、Iは、2つのデータフレームがある場合:

words  = [the, quick, fox, a, brown, fox] 
stopWords = [the, a] 

をその後Iが出力したい、任意の順序で:

words - stopWords = [quick, brown, fox, fox] 

IはRDD機能subtract()を保持することが観察されSpark-SQLファンクションexcept()は、結果のデータフレーム内の重複を削除します。私はexcept()出力がユニークな値だけを生成する理由を理解していません。

// --------------------------------------------------------------- 
// EXAMPLE USING RDDs 
// --------------------------------------------------------------- 
var wordsRdd = sc.parallelize(List("the", "quick", "fox", "a", "brown", "fox")) 
var stopWordsRdd = sc.parallelize(List("a", "the")) 

var wordsWithoutStopWordsRdd = wordsRdd.subtract(stopWordsRdd) 
wordsWithoutStopWordsRdd.take(10) 
// res11: Array[String] = Array(quick, brown, fox, fox) 

// --------------------------------------------------------------- 
// EXAMPLE USING DATAFRAMES 
// --------------------------------------------------------------- 
var wordsDf = wordsRdd.toDF() 
var stopWordsDf = stopWords.toDF() 
var wordsWithoutStopWordsDf = wordsDf.except(stopWordsDf) 

wordsWithoutStopWordsDf.show(10) 
// +-----+ 
// |value| 
// +-----+ 
// | fox| 
// |brown| 
// |quick| 
// +-----+ 

私は、周波数テーブルを生成していますので、重複を保持したい:

はここで完全なデモンストレーションです。

ご協力いただければ幸いです。

+0

私はそれが代わりに 'List'の' Set'を使用していますので、それがある賭けます。あなたが探しているもののほかに 'join 'があ​​ります。 –

+0

@AlbertoBonsanto: 'join'は交差点を実行します、そうですか?結果は、「A」と「B」の両方にある値になります。私は交差点ではなく、それらの違いが欲しい。 – stackoverflowuser2010

+0

結合のタイプによって異なります。ところで私の答えを確認 –

答えて

1
val words = sc.parallelize(List("the", "quick", "fox", "a", "brown", "fox")).toDF("id") 
val stopwords = sc.parallelize(List("a", "the")).toDF("id") 


words.join(stopwords, words("id") === stopwords("id"), "left_outer") 
    .where(stopwords("id").isNull) 
    .select(words("id")).show() 

出力は次のようになります。

+-----+ 
| id| 
+-----+ 
| fox| 
| fox| 
|brown| 
|quick| 
+-----+ 
+0

それは、外部結合のアプローチを残して本当に滑らかです。ありがとう。 – stackoverflowuser2010

関連する問題