【问题标题】:How can I change the name of a column in a parquet file using Pyarrow?如何使用 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) 创建新表,列重命名为提供的名称。

非常感谢!

【问题讨论】:

    标签: parquet pyarrow


    【解决方案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')
    

    【讨论】:

    • 啊!我有正确的版本,我只是没有尝试调用(?)它作为变量的一部分。太棒了,非常感谢您的代码!
    猜你喜欢
    • 2021-12-06
    • 2018-04-17
    • 2018-12-25
    • 2018-05-06
    • 2021-10-28
    • 2019-02-05
    • 1970-01-01
    • 2018-08-08
    • 2021-08-31
    相关资源
    最近更新 更多