2016-08-02 6 views
8

私はSpark SQL(D1とD2)に2つのデータフレームを持っています。Spark SQLで2つのデータフレームを結合し、1つのカラムだけを選択

私は、内側にしようとしていますが、それらの両方D1.join(D2, "some column") に参加し、のみD1のデータを取り戻す、ない完全なデータがを設定します。

D1とD2の両方に同じ列があります。

私はこれを手伝ってもらえますか?

私はSpark 1.6を使用しています。

答えて

23

「id」列に参加したいとします。そして、あなたが書くことができる:別の答えとして

val sqlContext = new org.apache.spark.sql.SQLContext(sc) 
import sqlContext.implicits._  
d1.as("d1").join(d2.as("d2"), $"d1.id" === $"d2.id").select($"d1.*") 
+0

こんにちは、この答えは役立ちます。私は愚かな質問があります。 $記号は何を意味しますか?自分のコードに$記号を書き込もうとするとエラーになります。 – Avi

+2

これは[ここ](https://spark.apache.org/docs/1.6.0/api/java/org/apache/spark/sql/Column.html)で説明されているように、DataFrameカラムにアクセスする別の方法ですが、 implicitsパッケージをインポートする必要があります(私の回答を編集しました) – cheseaux

+0

まあ、 "leftsemi" joinオプションもあります。それは、右側の行が一致する左のテーブルからの行を含みます。一致する行が1回だけ含まれるため、除外する必要もありません。 – user238607

2

を、あなたもエイリアスを追加することなく、次の操作を行うことができます:

d1.join(d2, d1("id") === d2("id")) 
    .select(d1.columns.map(c => d1(c)): _*) 
関連する問題