Pyarrow gcsfs write_to_dataset - PullRequest
       16

Pyarrow gcsfs write_to_dataset

0 голосов
/ 26 июня 2018

Как вы пишете в набор данных, используя pyarrow для gcsfs?

Я видел похожую проблему с использованием s3fs, которая, кажется, работает: Pyarrow s3fs разделение по timetsamp

Я пытался

import os
import gcsfs
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

data = {'date': ['2018-03-04T14:12:15.653Z', '2018-03-03T14:12:15.653Z', '2018-03-02T14:12:15.653Z', '2018-03-05T14:12:15.653Z'],
        'battles': [34, 25, 26, 57],
        'citys': ['london', 'newyork', 'boston', 'boston']}
df = pd.DataFrame(data, columns=['date', 'battles', 'citys'])
df['date'] = df['date'].map(lambda t: pd.to_datetime(t, format="%Y-%m-%dT%H:%M:%S.%fZ"))
df['year'], df['month'], df['day'] = df['date'].apply(lambda x: x.year), df['date'].apply(lambda x: x.month), df['date'].apply(lambda x: x.day)
df.groupby(by=['citys'])

gcs_bucket_name = '<my bucket name>'
GCP_Project_Name = '<my project name>'
fs_gcs = gcsfs.GCSFileSystem(project=GCP_Project_Name,token='browser')

table = pa.Table.from_pandas(df)

pq.write_to_dataset(table, 'gcs://test_bucket_python/dataset_name', filesystem=fs_gcs, partition_cols=['year', 'month', 'day'],compression='snappy')

Я получаю OSError: Unrecognized filesystem: <class 'gcsfs.core.GCSFileSystem'>

Обратите внимание, что fs_gcs.ls(test_bucket_python) работает, поэтому я знаю, что правильно подключен к корзине

1 Ответ

0 голосов
/ 26 июня 2018

Похоже, что pyarrow требует pyarrow.filesystem.FileSystem для этого использования, поэтому для GCS потребуется эквивалент pyarrow.filesystem.S3FSWrapper.

Начиная с этого PR (еще не выпущен), pandas начал поддерживать GCS по крайней мере для чтения.

Однако, to_parquet dask.dataframe распознает 'gcs://' для записи через механизм fastparquet или вы можете использовать свой экземпляр fs_gcs с fastparquet напрямую , так что это возможные варианты; если вы не хотите писать локально, а затем загружать файлы.

...