如何使用 Pyarrow 更改 parquet 文件中的列名称?

mbo*_*gon 4 parquet pyarrow

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

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

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

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

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

非常感谢!

Art*_*hur 8

我怀疑您使用的版本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')
Run Code Online (Sandbox Code Playgroud)