【问题标题】:comparing pyspark schema using dataframe.schema VS dataframe.printSchema()使用 dataframe.schema VS dataframe.printSchema() 比较 pyspark 模式
【发布时间】:2020-12-22 22:12:43
【问题描述】:

我在尝试比较两个 pyspark 数据帧的架构时遇到了问题。

如果我使用df1.schema == df2.schema,它有时会返回True,但有时会返回False(我确定架构匹配)

但是,当我使用df1.printSchema() == df2.printSchema() 时,输出始终是True

我知道df.schema的dataType是pyspark.sql.types.StructType,但是为什么有时会给出WRONG比较结果呢?它是 pyspark 中的错误吗?

【问题讨论】:

  • 基本上df1.printSchema() 返回None,因此您没有进行有意义的比较。即使您的架构匹配,它也会返回True。再看看有问题的DataFrame,它们真的一样吗?分享一些数据,分享一些代码。

标签: apache-spark types pyspark apache-spark-sql pyspark-dataframes


【解决方案1】:

如果您使用的是pyspark

获取每个数据帧的dtypes,这将返回List[(column_name, data_type)]

然后像这样比较:

for idx1,el1 in enumerate(df1.dtypes):
    for idx2,el2 in enumerate(df2.dtypes):
        if idx1 == idx2:
            if el1[0] == el2[0] and el1[1] == el2[1]:
                continue
            else:
                raise ValueError("Schema Don't Match for Col {0} and {1}".format(el1[0],el2[0]))

【讨论】:

    【解决方案2】:

    您可以使用以下命令。这一个还告诉哪些列是不同的,它是整洁干净的

    set(df1.schema).symmetric_difference(set(df2.schema))
    

    【讨论】:

      猜你喜欢
      • 2018-07-18
      • 2019-10-31
      • 2017-11-26
      • 2016-10-07
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2014-11-21
      相关资源
      最近更新 更多