Как прочитать определенный список файлов паркета из s3, используя PyArrow? - PullRequest
0 голосов
/ 03 ноября 2018

Мне нужно постепенно загружать данные в Pandas из файлов Parquet, хранящихся в s3, я пытаюсь использовать PyArrow для этого, но безуспешно.

Запись всего каталога файлов Parquet в Pandas работает просто отлично:

import s3fs
import pyarrow.parquet as pq
import pandas as pd

fs = s3fs.S3FileSystem(mykey,mysecret)
p_dataset = pq.ParquetDataset('s3://mys3bucket/directory', filesystem=fs)

df = p_dataset.read().to_pandas()

Но когда я пытаюсь загрузить один файл Parquet, я получаю сообщение об ошибке:

fs = s3fs.S3FileSystem(mykey,mysecret)
p_dataset = pq.ParquetDataset('s3://mys3bucket/directory/1_0_00000000000000014012'
, filesystem=fs)

df = p_dataset.read().to_pandas()

Выдает ошибку:

    ---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-179-3d01b32c60f7> in <module>()
     15 p_dataset = pq.ParquetDataset(
     16     's3://mys3bucket/directory/1_0_00000000000000014012',
---> 17                       filesystem=fs)
     18 
     19 table2.to_pandas()

C:\User\Anaconda3\lib\site-packages\pyarrow\parquet.py in __init__(self, path_or_paths, filesystem, schema, metadata, split_row_groups, validate_schema, filters, metadata_nthreads)
    880 
    881         if validate_schema:
--> 882             self.validate_schemas()
    883 
    884         if filters is not None:

C:\User\Anaconda3\lib\site-packages\pyarrow\parquet.py in validate_schemas(self)
    893                 self.schema = self.common_metadata.schema
    894             else:
--> 895                 self.schema = self.pieces[0].get_metadata(open_file).schema
    896         elif self.schema is None:
    897             self.schema = self.metadata.schema

IndexError: list index out of range

Буду признателен за любую помощь с этой ошибкой.

В идеале мне нужно добавить все новые данные, добавленные в s3 (добавленные с того момента, как я запускал этот скрипт в прошлый раз), в фрейм данных Pandas, поэтому я решил передать список имен файлов в ParquetDataset. Есть ли лучший способ добиться этого? Спасибо

1 Ответ

0 голосов
/ 04 ноября 2018

Вы хотите использовать pq.read_table (передать путь к файлу или дескриптор файла) вместо pq.ParquetDataset (передать каталог). НТН

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...