Сравнение между fastparquet и pyarrow?

После некоторых поисков мне не удалось найти подробное сравнение fastparquet и pyarrow.

Я нашел этот блог post (базовое сравнение скоростей).

и обсуждение на github, в котором утверждается, что файлы, созданные с помощью fastparquet, не поддерживают AWS. -athena (кстати, это все еще так?)

когда / почему я должен использовать один над другим? каковы основные преимущества и недостатки?


мой конкретный вариант использования — обработка данных с помощью dask записи их в s3, а затем чтения/анализа с помощью AWS-Афина.


person moshevi    schedule 16.07.2018    source источник
comment
Может рассматриваться как вопрос мнения, но могут быть технические моменты, которые могут дать достойный ответ.   -  person mdurant    schedule 16.07.2018
comment
Вы пытаетесь создать озеро данных с помощью Dask вместо AWS Glue? Я спрашиваю, потому что я в той же лодке.   -  person rpanai    schedule 17.07.2018
comment
нет, я читаю из набора данных паркета s3, обрабатываю его и записываю в другой набор данных паркета. у меня нет проблемы с разнообразием данных (которую пытаются решить озера).   -  person moshevi    schedule 17.07.2018
comment
Обратите внимание, что связанный тест имеет очень ограниченную область применения, он представляет один размер данных и один тип данных. Таким образом, вы не можете сделать никаких выводов о том, как эти инструменты масштабируются или как они обрабатывают другие типы данных. А для Python строки особенно интересны, так как они обычно являются узким местом во многих процессах.   -  person jangorecki    schedule 24.09.2018


Ответы (5)


Я использовал как fastparquet, так и pyarrow для преобразования данных protobuf в паркет и для запроса их в S3 с помощью Athena. Оба работали, однако, в моем случае использования, который представляет собой лямбда-функцию, zip-файл пакета должен быть легким, поэтому я выбрал fastparquet. (библиотека fastparquet весила всего около 1,1 МБ, а библиотека pyarrow — 176 МБ, а ограничение пакета Lambda — 250 МБ).

Я использовал следующее для хранения фрейма данных в виде файла паркета:

from fastparquet import write

parquet_file = path.join(filename + '.parq')
write(parquet_file, df_data)
person Daenerys    schedule 14.05.2019
comment
Я хотел бы отметить, что при установке fastparquet я получил Downloading fastparquet-0.4.1.tar.gz (28.6 MB) сегодня. - person moshevi; 25.08.2020

Отмечу, что автор сравнения скоростей является и автором pyarrow :) Могу говорить о случае с fastparquet.

С вашей точки зрения, самое важное, что нужно знать, — это совместимость. Athena не является тестовой мишенью для fastparquet (или pyarrow), поэтому вам следует тщательно протестировать ее, прежде чем сделать свой выбор. Существует ряд параметров, которые вы можете использовать (docs) для даты и времени. представление, нули, типы, которые могут быть важны для вас.

Запись на s3 с помощью dask, безусловно, является тестовым случаем для fastparquet, и я считаю, что у pyarrow также не должно быть проблем с этим.

person mdurant    schedule 16.07.2018
comment
так почему и когда я должен использовать один над другим? - person moshevi; 17.07.2018
comment
Я хотел бы отметить, что автор приведенного выше ответа также является разработчиком fastparquet :) - person Efi Z; 20.02.2020

Я просто использовал fastparquet для случая, чтобы получить данные из Elasticsearch и сохранить их в S3, а затем выполнить запрос с помощью Athena, и у меня не было никаких проблем.

Я использовал следующее для хранения фрейма данных в S3 в виде файла паркета:

import s3fs
import fastparquet as fp
import pandas as pd
import numpy as np

s3 = s3fs.S3FileSystem()
myopen = s3.open
s3bucket = 'mydata-aws-bucket/'

# random dataframe for demo
df = pd.DataFrame(np.random.randint(0,100,size=(100, 4)), columns=list('ABCD'))

parqKey = s3bucket + "datafile"  + ".parq.snappy"
fp.write(parqKey, df ,compression='SNAPPY', open_with=myopen)

Моя таблица выглядит примерно так в Athena:

CREATE EXTERNAL TABLE IF NOT EXISTS myanalytics_parquet (
  `column1` string,
  `column2` int,
  `column3` DOUBLE,
  `column4` int,
  `column5` string
 )
STORED AS PARQUET
LOCATION 's3://mydata-aws-bucket/'
tblproperties ("parquet.compress"="SNAPPY")
person Klaus Seiler    schedule 25.01.2019

Однако, поскольку в вопросе отсутствуют конкретные критерии, и я пришел сюда за хорошим выбором по умолчанию, я хочу заявить, что механизм по умолчанию pandas для объектов DataFrame является pyarrow (см. документы pandas).

person d4tm4x    schedule 22.12.2020

Этот вопрос может быть немного старым, но я работаю над той же проблемой, и я нашел этот тест https://wesmckinney.com/blog/python-parquet-update/ . Согласно ему, pyarrow быстрее, чем fastparquet, неудивительно, что это движок по умолчанию, используемый в dask.

Обновлять:

Обновление моего предыдущего ответа. Мне больше повезло писать с помощью pyarrow и читать с помощью fastparquet в облачном хранилище Google.

person Aladejubelo Oluwashina    schedule 26.07.2019
comment
(но, опять же, автор того блога - автор стрелки) - person mdurant; 26.07.2019
comment
Обновление моего предыдущего ответа. Мне больше повезло писать с помощью pyarrow и читать с помощью fastparquet в облачном хранилище Google. - person Aladejubelo Oluwashina; 14.09.2019
comment
Мой вариант использования заключался в том, чтобы читать данные из hbase и копировать в azure. Я использовал pyarrow для преобразования фрейма данных pandas в файлы паркета. Но когда я читал файлы паркета из блоба с помощью pyarrow, я столкнулся с множеством проблем, связанных со схемой, даже после определения схемы. Теперь использую fastparquet как для чтения, так и для записи без каких-либо проблем со схемой. - person Neeraj Sharma; 08.04.2020
comment
разве это не тот же тест, который я указал в вопросе? - person moshevi; 03.08.2020
comment
pyarrow по умолчанию в пандах, fastparquet в dask - person seanv507; 13.01.2021