如何找到 2 个 pyarrow 数据集架构的不同之处?

问题描述 投票:0回答:2

我有两个 pyarrow 数据集模式,由于某种原因,即使它们应该相同,它们也是不同的(我假设在存储其中一个镶木地板文件时,对于一个分区,某些列被转换为不同的数据类型,但我不知道是哪一个)。

现在我知道如何比较两个模式是否相同。我可以这样做:

import pandas as pd
import numpy as np
import pyarrow as pa

df1 = pd.DataFrame({'col1': np.zeros(10), 'col2':np.random.rand(10)})
df2 = pd.DataFrame({'col1':np.ones(10), 'col2': np.zeros(10)})

schema_1 = pa.Schema.from_pandas(df1)
schema_2 = pa.Schema.from_pandas(df2)

schema_1.equals(schema_2)

df3 = df2.copy()
df3['col2'] = df3['col2'].astype('int')

schema_3 = pa.Schema.from_pandas(df3)
print(schema_1.equals(schema_2), schema_1.equals(schema_3))

但是我如何找出它们的不同之处呢? (目视检查不算,我简单尝试过,500多列没有发现任何差异)

python pyarrow
2个回答
1
投票

每个模式基本上都是 pyarrow.field 类型的有序组。因此,pyarrow.schema 可以具有名称、类型以及字段类型的其他一些属性不同的字段。 此外,顺序可能也很重要。

要查找 schema_3 中 schema_1 中没有的字段,请使用集合。

set(schema_3).difference(set(schema_1))

要查找不同字段的名称,请使用 .names 属性

set(schema_3.names).difference(set(schema_1.names))

0
投票

聚会迟到了,但是,

Schema
现在有一个
equals
方法。所以,你可以这样做:

if schema2.equals(schema3):
   print("Schemas are the same")
else:
   print("Schemas differ")

根据 文档,您还可以通过添加

check_metadata=True
参数来包含元数据。

© www.soinside.com 2019 - 2024. All rights reserved.