【问题标题】:Pyspark: TypeError: unionByName() got an unexpected keyword argument 'allowMissingColumns'Pyspark: TypeError: unionByName() 有一个意外的关键字参数 \'allowMissingColumns\'
【发布时间】:2023-01-05 18:35:56
【问题描述】:

在使用 Pyspark unionByName 文档中的这些代码行时

df =spark.createDataFrame(data,columns)

df1 = spark.createDataFrame([[1, 2, 3]], ["col0", "col1", "col2"])
df2 = spark.createDataFrame([[4, 5, 6]], ["col1", "col2", "col3"])
df1.unionByName(df2, allowMissingColumns=True).show()

收到此错误:

    unionByName() got an unexpected keyword argument 'allowMissingColumns'
    Traceback (most recent call last):
    TypeError: unionByName() got an unexpected keyword argument 'allowMissingColumns'

在我的代码中还有其他方法可以做到这一点

   df1: ["col0", "col1", "col2","col3"]
   df2: ["col1", "col2"]

我想在 ["col1", "col2"] 上合并它们,并期望 col0col3union 之后为空。

【问题讨论】:

  • 您使用的是什么版本?请注意,allowMissingColumn 从版本 3.1.0 开始可用。
  • 对我来说效果很好,请检查您使用的版本是否正确
  • 是的,我使用的是 2.4 版 我怎样才能实现相同的功能,有没有解决方法

标签: python python-3.x apache-spark pyspark apache-spark-sql


【解决方案1】:

您收到此错误的原因是因为您使用的 Spark 版本尚不支持 allowMissingColumns 函数的 unionByName 参数。

此功能可从 this commit 获得,该功能从版本 3.1.0 开始提供。

如果您使用的是早期版本,则可以执行以下解决方法:

from pyspark.sql.functions import lit
from pyspark.sql.types import StringType

df1 = spark.createDataFrame([[1, 2, 3]], ["col0", "col1", "col2"])
df2 = spark.createDataFrame([[4, 5, 6]], ["col1", "col2", "col3"])

not_in_df1 = set(df2.columns) - set(df1.columns)
for col in not_in_df1:
    df1 = df1.withColumn(col, lit(None).cast(StringType()))

not_in_df2 = set(df1.columns) - set(df2.columns)
for col in not_in_df2:
    df2 = df2.withColumn(col, lit(None).cast(StringType()))

df1.unionByName(df2).show()
+----+----+----+----+
|col0|col1|col2|col3|
+----+----+----+----+
|   1|   2|   3|null|
|null|   4|   5|   6|
+----+----+----+----+

所以本质上,您正在创建每个数据框中所需的列,以便具有相同的列组成。此外,我们使用lit(None).cast(StringType()) 来创建文字空列。

这有点 hack,但确实完成了工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-09-17
    • 2020-09-12
    • 1970-01-01
    • 1970-01-01
    • 2012-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多