s3 に保存されている Parquet ファイルから Pandas にデータを段階的に読み込む必要があります。これには 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 に渡すことを考えていました。これを達成するためのより良い方法はありますか?ありがとう