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

时间:2020-08-10 23:10:35

标签: parquet pyarrow

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

是否有一种方法可以重命名文件中的列,而不必重新生成或复制文件?

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

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

rename_columns(自己,名称),创建具有重命名为提供名称的列的新表。

非常感谢!

1 个答案:

答案 0 :(得分:3)

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