使用另一个DF(两个DF中的相同列)Spark Scala的列过滤DF
我正在尝试使用另一个数据帧DF2的列过滤数据帧DF1,列为country\u id。我想将第一个数据帧的所有行减少到第二个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
+--------------+------------+-------+
|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)要求您不要打开另一个线程。提前谢谢!