2016-08-02 16 views
8

Tôi có hai DataFrames trong Spark SQL (D1 và D2 ​​).Tham gia hai DataFrames trong Spark SQL và chọn các cột chỉ có một

Tôi đang cố gắng tham gia cả hai người trong số họ D1.join(D2, "some column") và lấy lại dữ liệu của chỉ D1, không phải bộ dữ liệu hoàn chỉnh.

Cả D1 và D2 ​​đều có cùng cột.

Có thể ai đó giúp tôi về điều này không?

Tôi đang sử dụng Spark 1.6.

Trả lời

23

Giả sử bạn muốn tham gia vào cột "id". Sau đó, bạn có thể viết:

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

Hi, Câu trả lời này sẽ giúp. Tôi có một câu hỏi ngớ ngẩn. Dấu $ nghĩa là gì? Tôi nhận được lỗi khi tôi cố gắng viết $ ký trong mã của tôi. – Avi

+2

Đó là một cách khác để truy cập các cột DataFrame, như được giải thích [ở đây] (https://spark.apache.org/docs/1.6.0/api/java/org/apache/spark/sql/Column.html), nhưng bạn phải nhập gói implicits (tôi đã chỉnh sửa câu trả lời của mình) – cheseaux

+0

Vâng, cũng có tùy chọn tham gia "leftsemi". Nó bao gồm các hàng từ bảng bên trái có hàng phù hợp ở bên phải. Cũng không cần phải suy ra vì các hàng phù hợp chỉ được bao gồm một lần. – user238607

2

Như một câu trả lời khác, bạn cũng có thể làm như sau mà không bí danh thêm:

d1.join(d2, d1("id") === d2("id")) 
    .select(d1.columns.map(c => d1(c)): _*) 
Các vấn đề liên quan