如何使用 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')
我有数百个用 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')