我是Apache Beam的新手,我来自API丰富的Spark世界。
如何使用Apache Beam获取Parquet文件的模式?没有它,我在内存中加载数据,因为有时它的风险很大,我只对了解列感兴趣,并且可选地了解列类型。
语言Python。
存储系统是Google Cloud Storage,Apache Beam作业必须在Dataflow中运行。
FYI,我尝试了sof中建议的以下方法:
from pyarrow.parquet import ParquetFile
ParquetFile(source).metadata
首先,当我给它一个gs://…
路径时,它不起作用,给我这个错误:错误:没有这样的文件或目录
然后我尝试在我的机器中使用本地文件,并将代码稍微更改为:
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)