Pyarrow.lib.Schema 与 pyarrow.parquet.Schema

Posted

技术标签:

【中文标题】Pyarrow.lib.Schema 与 pyarrow.parquet.Schema【英文标题】:Pyarrow.lib.Schema vs. pyarrow.parquet.Schema 【发布时间】:2018-12-11 13:59:34 【问题描述】:

当我尝试跨多分区 parquet 文件加载时,由于丢失的数据会以空值填充架构,因此某些架构会被无效推断。我认为在 pyarrow.parquet.ParquetDataset 中指定模式可以解决此问题,但我不知道如何构建正确的 pyarrow.parquet.Schema 类型的模式。一些示例代码:

import pyarrow as pa
import pa.parquet as pq    
test_schema = pa.schema([pa.field('field1', pa.string()), pa.field('field2', pa.float64())])
paths = ['test_root/partition1/file1.parquet', 'test_root/partition2/file2.parquet']
dataset = pq.ParquetDataset(paths, schema=schema)

还有错误:

AttributeError: 'pyarrow.lib.Schema' object has no attribute 'to_arrow_schema'

但我在文档 (https://arrow.apache.org/docs/python/generated/pyarrow.parquet.ParquetDataset.html) 中找不到有关如何构建 pyarrow.parquet.Schema 架构的任何文档,并且只制作了一个 pyarrow.lib.Schema 会出现上述错误。

【问题讨论】:

【参考方案1】:

目前还没有在 Python 中构建 Parquet 模式的 API。不过,您可以使用从特定文件中读取的文件(请参阅pq.ParquetFile(...).schema)。

您能否在 ARROW JIRA 项目上打开一个问题以请求使用 Python 构建 Parquet 模式的功能?

https://issues.apache.org/jira

【讨论】:

谢谢,我会这样做的。但是我尝试了一种解决方法,使用 to_arrow_schema 函数创建自己的 pyarrow 模式包装类。所以现在我有一个模式,用于创建我调用 write_to_dataset 的 pyarrow 表。我在保存的文件上调用 pq.ParquetDataset 时使用相同的架构,但我得到一个 ValueError:test_file.parquet 中的架构不同。我能做些什么来解决这个问题吗?我在两边都指定了相同的架构。

以上是关于Pyarrow.lib.Schema 与 pyarrow.parquet.Schema的主要内容,如果未能解决你的问题,请参考以下文章

LDAP 与 MYSQL .. JA-SIG CAS 与 LDAP 与 CAS 与 MySQL

python网络编程基础(线程与进程并行与并发同步与异步)

=与==&与&&| 与 || 的区别

与 0 进行比较与与某个值进行比较是不是更快?

三.工具与市场-债券与债务股票与公司

RESTfulREST 与 RESTful 理解与实践