【问题标题】:Pyspark - Union tables with different column namesPyspark - 具有不同列名的联合表
【发布时间】:2021-12-26 12:12:00
【问题描述】:

假设我有以下 2 个要合并的表:

+---------+-------+---+---+---+
|month_key|account|ch1|ch2|ch5|
+---------+-------+---+---+---+
|      Aug|    abc|  0|  1|  1|
+---------+-------+---+---+---+
+---------+-------+---+---+---+
|month_key|account|ch3|ch4|ch5|
+---------+-------+---+---+---+
|     Sept|    bcd|  1|  1|  0|
+---------+-------+---+---+---+

我如何在进行并集时保留所有列?我这样做时得到以下结果:

df1.union(df2).show()

+---------+-------+---+---+---+
|month_key|account|ch1|ch2|ch5|
+---------+-------+---+---+---+
|      Aug|    abc|  0|  1|  1|
|     Sept|    bcd|  1|  1|  0|
+---------+-------+---+---+---+

在我的实际数据集中,我将拥有数百个通道,如果我需要列出所有常见列,我认为很难使用 join。

我使用的是 spark 版本 2.4.3。

我知道 unionByName 可以用于 spark 3.0 及更高版本,但有替代方案吗?

感谢您的帮助。

【问题讨论】:

标签: pyspark


【解决方案1】:

来自https://spark.apache.org/docs/latest/api/python/reference/api/pyspark.sql.DataFrame.union.html:

“作为 SQL 中的标准,此函数按位置(而不是名称)解析列”

做你想做的事:

df1.unionByName(df2, allowMissingColumns=True)

(可从 Spark 3.1.X 获得)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2018-12-12
    • 2021-05-12
    • 1970-01-01
    相关资源
    最近更新 更多