当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python PySpark DataFrame unionByName方法用法及代码示例


PySpark DataFrame 的 unionByName(~) 方法通过对齐列标签来垂直连接 PySpark DataFrame。

参数

1. other | PySpark DataFrame

另一个要连接的DataFrame。

2. allowMissingColumns | boolean | optional

  • 如果是True,那么如果两个DataFrames的列标签不对齐,则不会抛出错误。如果出现错位,则将设置 null 值。

  • 如果是False,那么如果两个DataFrames的列标签不对齐,将会抛出错误。

默认情况下,allowMissingColumns=False

返回值

一个新的PySpark DataFrame

例子

通过对齐列垂直连接 PySpark DataFrame

考虑以下PySpark DataFrame:

df1 = spark.createDataFrame([[1, 2, 3]], ["A", "B", "C"])
df1.show()



+---+---+---+
|  A|  B|  C|
+---+---+---+
|  1|  2|  3|
+---+---+---+

这是另一个PySpark DataFrame:

df2 = spark.createDataFrame([[4, 5, 6], [7, 8, 9]], ["A", "B", "C"])
df2.show()



+---+---+---+
|  A|  B|  C|
+---+---+---+
|  4|  5|  6|
|  7|  8|  9|
+---+---+---+

要通过对齐列来垂直连接这两个DataFrames:

df1.unionByName(df2).show()



+---+---+---+
|  A|  B|  C|
+---+---+---+
|  1|  2|  3|
|  4|  5|  6|
|  7|  8|  9|
+---+---+---+
处理列标签不匹配的情况

默认情况下, allowMissingColumns=False ,这意味着如果两个 DataFrames 没有完全匹配的列标签,则会抛出错误。

例如,考虑以下PySpark DataFrame:

df1 = spark.createDataFrame([[1, 2, 3]], ["A", "B", "C"])
df1.show()



+---+---+---+
|  A|  B|  C|
+---+---+---+
|  1|  2|  3|
+---+---+---+

这是其他 PySpark DataFrame,其列标签略有不同:

df2 = spark.createDataFrame([[4, 5, 6], [7, 8, 9]], ["B", "C", "D"])
df2.show()



+---+---+---+
|  B|  C|  D|
+---+---+---+
|  4|  5|  6|
|  7|  8|  9|
+---+---+---+

由于列标签不匹配,调用 unionByName(~) 将导致错误:

df1.unionByName(df2).show()   # allowMissingColumns=False



AnalysisException: Cannot resolve column name "A" among (B, C, D)

要允许未对齐的列,请设置 allowMissingColumns=True

df1.unionByName(df2, allowMissingColumns=True).show()



+----+---+---+----+
|   A|  B|  C|   D|
+----+---+---+----+
|   1|  2|  3|null|
|null|  4|  5|   6|
|null|  7|  8|   9|
+----+---+---+----+

请注意我们如何为未对齐的列获取 null 值。

相关用法


注:本文由纯净天空筛选整理自Isshin Inada大神的英文原创作品 PySpark DataFrame | unionByName method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。