使用另一个DF(两个DF中的相同列)Spark Scala的列过滤DF

使用另一个DF(两个DF中的相同列)Spark Scala的列过滤DF,scala,apache-spark,Scala,Apache Spark,我正在尝试使用另一个数据帧DF2的列过滤数据帧DF1,列为country\u id。我想将第一个数据帧的所有行减少到第二个DF上的国家。例如: +--------------+------------+-------+ |Date | country_id | value | +--------------+------------+-------+ |2015-12-14 |ARG |5 | |2015-12-14 |GER

我正在尝试使用另一个数据帧DF2的列过滤数据帧DF1,列为country\u id。我想将第一个数据帧的所有行减少到第二个DF上的国家。例如:

+--------------+------------+-------+
|Date          | country_id | value |
+--------------+------------+-------+
|2015-12-14    |ARG         |5      |
|2015-12-14    |GER         |1      |
|2015-12-14    |RUS         |1      |
|2015-12-14    |CHN         |3      |
|2015-12-14    |USA         |1      |


+--------------+------------+
|USE           | country_id |
+--------------+------------+
|  F           |RUS         |
|  F           |CHN         |

Expected:

+--------------+------------+-------+
|Date          | country_id | value |
+--------------+------------+-------+
|2015-12-14    |RUS         |1      |
|2015-12-14    |CHN         |3      |
我怎么能这样做?我是新加入Spark的,所以我考虑过使用intersect?还是其他方法更有效


提前谢谢

您可以使用左半连接:

val DF3 = DF1.join(DF2, Seq("country_id"), "left_semi")

DF3.show

//+----------+----------+-----+
//|country_id|      Date|value|
//+----------+----------+-----+
//|       RUS|2015-12-14|    1|
//|       CHN|2015-12-14|    3|
//+----------+----------+-----+
也可以使用内部联接:

val DF3 = DF1.alias("a").join(DF2.alias("b"), Seq("country_id")).select("a.*")

就是这样!左半是我要找的!这是我第一次读关于左半和左反的书,谢谢你们抽出时间,让我的眼睛在这个世界上多睁开一点!!Blackbishop,可以这样做吗?只需要第二个DF的一列?(例如,选择列USE)要求您不要打开另一个线程。提前谢谢!