我正在做一个项目,我需要使用Apache Arrow创建和分析拼花文件。我工作的环境不允许我"="在文件路径中,hive命名约定强制使用,例如"year=2007"是否有一种方法与Arrow创建分区拼花文件,而不使用蜂箱风格的文件命名约定?
目前Arrow支持"hive"one_answers";directory"计划。蜂巢方案,正如你提到的,是column_name=value
。目前还没有办法将=
字符更改为不同的分隔符,但如果您想要制作一个,它听起来像是一个很好的JIRA票。
目录方案将只编码值,不需要使用=
,因此可能对您有用。这是一个略有不同的方案,因为它不将列名存储为目录名的一部分。因此,在读取数据时需要提供该列名。
我不确定你是使用pyarrow还是c++ -arrow。在pyarrow中,这里讨论的是目录方案。在cookbook中还有一个使用目录模式编写数据集的简单示例。
import pyarrow as pa
import pyarrow.dataset as ds
import numpy.random
data = pa.table({"day": numpy.random.randint(1, 31, size=100),
"month": numpy.random.randint(1, 12, size=100),
"year": [2000 + x // 10 for x in range(100)]})
# The directory scheme is the default if no flavor is specified
partitioning=ds.partitioning(pa.schema([("year", pa.int16())]))
ds.write_dataset(data, "./partitioned", format="parquet", partitioning=partitioning)
这将产生如下文件:
./partitioned/2000/part-0.parquet
./partitioned/2001/part-1.parquet
./partitioned/2002/part-2.parquet
./partitioned/2003/part-3.parquet
./partitioned/2004/part-4.parquet
./partitioned/2005/part-6.parquet
./partitioned/2006/part-5.parquet
./partitioned/2007/part-7.parquet
./partitioned/2008/part-8.parquet
./partitioned/2009/part-9.parquet