Может ли Apache Beam определять схему (имена столбцов) файла Parquet, такого как Spark и Pandas? - PullRequest
0 голосов
/ 12 февраля 2020

Я новичок в Apache Beam и пришел из мира Spark, где API настолько богат.

Как я могу получить схему файла Parquet, используя Apache Beam? без этого я загружаю данные в память, поскольку иногда это может быть огромным, и меня интересует только знание столбцов и, необязательно, типа столбцов.

Язык Python.

система хранения - Google Cloud Storage, и задание Apache Beam должно выполняться в потоке данных.

К вашему сведению, я попробовал следующее, как предложено в 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

Но это решение, как мне кажется, требует от меня, чтобы этот файл был локальным ( сервера потоков данных ??) и он не использует Apache Beam.

Любое (лучшее) решение?

Спасибо!

1 Ответ

2 голосов
/ 12 февраля 2020

Я счастлив, что смог бы придумать решение, сделанное вручную, после прочтения источника кода 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)
...