如何在 Apache Spark 的 Left join 中获取 join key

abc_spark

我有下面的 DF -

scala> val df1=Seq( ("1","1_10"), ("1","1_11"), ("2","2_20"), ("3","3_30"), ("3 ","3_31") )toDF("c1","c2")

+---+----+
| c1|  c2|
+---+----+
|  1|1_10|
|  1|1_11|
|  2|2_20|
|  3|3_30|
|  3|3_31|
+---+----+

val df2=Seq(("2","200"), ("3","300"))toDF("c1","val")

+---+---+
| c1| val|
+---+---+
|  2|200|
|  3|300|
+---+---+

如果,我进行 left join ,我将得到如下结果。

  scala> df1.join(df2,Seq("c1"),"left").select(df1("c1").alias("df1_c1"),df1("c2"),df2("val")).show
+------+----+----+
|df1_c1|  c2| val|
+------+----+----+
|     1|1_10|null|
|     1|1_11|null|
|     2|2_20| 200|
|     3|3_30| 300|
|     3|3_31| 300|
+------+----+----+

但是,我怎么能得到右表的连接键 val 呢?

预期输出 -

+------+----+----+------+
|df1_c1|  c2| val|df2_c1|
+------+----+----+------+
|     1|1_10|null|  null|
|     1|1_11|null|  null|
|     2|2_20| 200|     2|
|     3|3_30| 300|     3|
|     3|3_31| 300|     3|
+------+----+----+------+

If I try ,  df1.join(df2,Seq("c1"),"left").select(df1("c1").alias("df1_c1"),df1("c2"),df2("val"),df2("c1")).show,

我会收到以下错误 -

org.apache.spark.sql.AnalysisException: Resolved attribute(s) c1#19639 missing from c1#19630,c2#19631,val#19640 in operator !Project [c1#19630 AS df1_c1#19667, c2#19631, val#19640, c1#19639]. Attribute(s) with the same name appear in the operation: c1. Please check if the right attribute(s) are used.;
猎鹰-le0

如果您使用列序列 Seq("c1")进行连接,Spark 会删除重复的列您可以改用自定义联接表达式:

df1.as("df1").join(df2.as("df2"), expr("df1.c1 == df2.c1"),"left").select($"df1.c1".alias("df1_c1"), $"df1.c2", $"df2.c1".as("df2_c1"), $"df2.val").show(false)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在 LEFT JOIN 中嵌套 INNER JOIN

在Apache Spark Join中包含空值

Django如何在LEFT JOIN中传递子查询

如何在BigQuery的标准SQL中编写LEFT JOIN?

如何在LINQ中结合LEFT JOIN,GROUP BY和SUM?

如何在 spark 2.2 中模拟 array_join() 方法

如何在Apache Flink中使用流实现LEFT OUTER JOIN

mysql如何使用join和left join

SQL 中的 INNER JOIN 与 LEFT JOIN 性能

Apache Spark中的join和cogroup有什么区别

在执行join或groupWith时,Java中的Spark如何比较两个Key?

如何在MySQL中缺少LEFT表中的键值的MySQL中进行LEFT JOIN?

如何优化多个LEFT JOIN

如何订购LEFT JOIN的结果

MYSQL中的LEFT JOIN问题

LEFT OUTER JOIN如何返回比左表中多的记录?

如何在LEFT JOIN中的Entity Framework 6中生成IS NULL和IS NOT NULL

即使在 MYSQL LEFT JOIN 中存在 Join 之后,如何引入 NULL 值

如何编写从LEFT JOIN结果中减去INNER JOIN结果的SQL查询?

如何在sql的Left Join中仅显示表的左侧部分(不相交部分)?

如何在LINQ to SQL中编写右侧为null的LEFT OUTER JOIN?

如何在 hive 查询中实现 LEFT/RIGHT OUTER JOIN 来替换 NOT IN?

如何在Django的ORM(1.11)中创建等效的LEFT JOIN查询

如何在R中left_join并重复将值连接到多个变量?

在 R 中,如何在多個數據幀上使用 left_join?

如何在 Laravel 中通过 Left Join、count 和 group by 编写这个 SQL 查询?

Apache Flink中Join的输出

获取 LEFT JOIN 中的最后一行

我试图只从 LEFT JOIN 中获取一行