繁体   English   中英

Apache Beam 可以检测 Spark 和 Pandas 等 Parquet 文件的架构(列名)吗?

[英]Can Apache Beam detect the schema (column names) of a Parquet file like Spark and Pandas?

我是 Apache Beam 的新手,我来自 API 非常丰富的 Spark 世界。

如何使用 Apache Beam 获取 Parquet 文件的架构? 没有它,我将数据加载到内存中,因为有时它会冒很大的风险,而且我只对了解列和可选的列类型感兴趣。

语言是 Python。

存储系统为 Google Cloud Storage,Apache Beam 作业必须在 Dataflow 中运行。

仅供参考,我已按照sof 中的建议尝试了以下操作:

from pyarrow.parquet import ParquetFile
ParquetFile(source).metadata

首先,当我给它一个gs://..路径时它不起作用,给我这个错误: error: No such file or directory

然后我在我的机器中尝试了一个本地文件,我将代码稍微更改为:

from pyarrow.parquet import ParquetFile
ParquetFile(source).metadata.schema

所以我可以有列:

<pyarrow._parquet.ParquetSchema object at 0x10927cfd0>
name: BYTE_ARRAY
age: INT64
hobbies: BYTE_ARRAY String

但是在我看来,这个解决方案需要我将此文件放到本地(Dataflow 服务器??),并且它不使用 Apache Beam。

任何(更好的)解决方案?

谢谢!

我很高兴在阅读了apache_beam.io.parquetio的代码源后,我可以想出一个手工制作的解决方案:

import pyarrow.parquet as pq
from apache_beam.io.parquetio import _ParquetSource
import os

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '<json_key_path>'

ps = _ParquetSource("", None, None, None) # file_pattern, min_bundle_size, validate, columns
with ps.open_file("<GCS_path_of_parquet_file>") as f:
    pf = pq.ParquetFile(f)
    print(pf.metadata.schema)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM