2つのSpark SQLデータフレームA
とB
があるとします。私は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|
// +-----+
私は、周波数テーブルを生成していますので、重複を保持したい:
はここで完全なデモンストレーションです。
ご協力いただければ幸いです。
私はそれが代わりに 'List'の' Set'を使用していますので、それがある賭けます。あなたが探しているもののほかに 'join 'があります。 –
@AlbertoBonsanto: 'join'は交差点を実行します、そうですか?結果は、「A」と「B」の両方にある値になります。私は交差点ではなく、それらの違いが欲しい。 – stackoverflowuser2010
結合のタイプによって異なります。ところで私の答えを確認 –