如何使用 Pyarrow 更改镶木地板文件中列的名称?

Posted

技术标签:

【中文标题】如何使用 Pyarrow 更改镶木地板文件中列的名称?【英文标题】:How can I change the name of a column in a parquet file using Pyarrow? 【发布时间】:2020-08-10 23:10:35 【问题描述】:

我有数百个使用 PyArrow 创建的镶木地板文件。但是,其中一些文件的字段/列的名称(我们将其称为 Orange)与原始列(称为 Sporange)略有不同,因为其中一个使用了查询的变体。否则,数据(所有其他字段和所有数据)是相同的。在数据库世界中,我会做一个 ALTER TABLE 并重命名该列。但是,我不知道如何使用 parquet/PyArrow 来做到这一点

有没有办法重命名文件中的列,而不必重新生成或复制文件?

或者,我可以读取它(我假设是 read_table 或 ParquetFile),更改对象中的列(不确定如何执行此操作)并将其写出来吗?

我看到“rename_columns”,但不确定它是如何工作的;我尝试单独使用它,它说“rename_columns 未定义”。

rename_columns(self, names) 创建新表,列重命名为提供的名称。

非常感谢!

【问题讨论】:

【参考方案1】:

我怀疑您使用的pyarrow 版本不支持rename_columns。可以运行pa.__version__查看吗?

否则你想要做的很简单,在下面的例子中,我将列 b 重命名为 c:

import pyarrow as pa
import pyarrow.parquet as pq

col_a = pa.array([1, 2, 3], pa.int32())
col_b = pa.array(["X", "Y", "Z"], pa.string())

table = pa.Table.from_arrays(
    [col_a, col_b],
    schema=pa.schema([
        pa.field('a', col_a.type),
        pa.field('b', col_b.type),
    ])
)

pq.write_table(table, '/tmp/original')
original = pq.read_table('/tmp/original')
renamed = original.rename_columns(['a', 'c'])
pq.write_table(renamed, '/tmp/renamed')

【讨论】:

啊!我有正确的版本,我只是没有尝试调用(?)它作为变量的一部分。太棒了,非常感谢您的代码!

以上是关于如何使用 Pyarrow 更改镶木地板文件中列的名称?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pyarrow 从 S3 读取镶木地板文件列表作为熊猫数据框?

如何在 python 中使用 pyarrow 从 S3 读取分区镶木地板文件

Hive/Bigsql Pandas 将浮点数转换为整数,使用 pyarrow 将空值转换为镶木地板文件

将带有 timedeltas 的 pandas 数据帧写入镶木地板

是否可以用 pyarrow 编写镶木地板统计信息?

如何使用熊猫使用 zstandard 压缩镶木地板文件