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

How can I change the name of a column in a parquet file using Pyarrow?

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

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

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

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

rename_columns(self, names) Create new table with columns renamed to provided names.

非常感谢!

我怀疑您使用的 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')