前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何避免spark dataframe的JOIN操作之后产生重复列(Reference '***' is ambiguous问题解决)

如何避免spark dataframe的JOIN操作之后产生重复列(Reference '***' is ambiguous问题解决)

作者头像
sparkexpert
发布2018-01-09 16:12:19
2.7K0
发布2018-01-09 16:12:19
举报
文章被收录于专栏:大数据智能实战

spark datafrme提供了强大的JOIN操作。

但是在操作的时候,经常发现会碰到重复列的问题。如下:

如分别创建两个DF,其结果如下:

代码语言:js
复制
val df = sc.parallelize(Array(
     ("one", "A", 1), ("one", "B", 2), ("two", "A", 3), ("two", "B", 4)
 )).toDF("key1", "key2", "value")
 df.show()


 +----+----+-----+
 |key1|key2|value|
 +----+----+-----+
 | one|   A|    1|
 | one|   B|    2|
 | two|   A|    3|
 | two|   B|    4|
 +----+----+-----+

val df2 = sc.parallelize(Array(
     ("one", "A", 5), ("two", "A", 6)
 )).toDF("key1", "key2", "value2")
 df2.show()


 +----+----+------+
 |key1|key2|value2|
 +----+----+------+
 | one|   A|     5|
 | two|   A|     6|
 +----+----+------+

对其进行JOIN操作之后,发现多产生了KEY1和KEY2这样的两个字段。
val joined = df.join(df2, df("key1") === df2("key1") && df("key2") === df2("key2"), "left_outer")
 joined.show()


 +----+----+-----+----+----+------+
 |key1|key2|value|key1|key2|value2|
 +----+----+-----+----+----+------+
 | two|   A|    3| two|   A|     6|
 | two|   B|    4|null|null|  null|
 | one|   A|    1| one|   A|     5|
 | one|   B|    2|null|null|  null|
 +----+----+-----+----+----+------+

假如这两个字段同时存在,那么就会报错,如下:org.apache.spark.sql.AnalysisException: Reference 'key2' is ambiguous

因此,网上有很多关于如何在JOIN之后删除列的,后来经过仔细查找,才发现通过修改JOIN的表达式,完全可以避免这个问题。而且非常简单。主要是通过Seq这个对象来实现。

代码语言:js
复制
df.join(df2, Seq("key1", "key2"), "left_outer").show()


 +----+----+-----+------+
 |key1|key2|value|value2|
 +----+----+-----+------+
 | two|   A|    3|     6|
 | two|   B|    4|  null|
 | one|   A|    1|     5|
 | one|   B|    2|  null|
 +----+----+-----+------+

通过实践,完全成功!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年10月17日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档