[解決済み] フェザーとパーケットの違いは何ですか?
質問
どちらも 柱状(ディスク)記憶形式 であり、データ分析システムで使用される。 どちらも Apache Arrow ( パイアロー パッケージ)に対応し に対応するように設計されています。 矢印 に対応するように設計されています。
両方の形式はどのように違うのですか?
パンダを扱うときは、可能な限り常にfeatherを優先すべきでしょうか?
どのようなユースケースで フェザー よりも 寄木細工 と その逆は?
付録
ここにヒントがあります。 https://github.com/wesm/feather/issues/188 , が、このプロジェクトの歴史が浅いので、もしかしたら少し古いかもしれません。
データフレーム全体をダンプしてロードしているだけなので、深刻なスピードテストではありません。 データフレーム全体をダンプして読み込んでいるだけなので、深刻な速度テストではありませんが、この形式を聞いたことがない人に印象を与えるために
Dataframe を丸ごとダンプして読み込んでいるだけなので、深刻な速度テストではありません。
# IPython
import numpy as np
import pandas as pd
import pyarrow as pa
import pyarrow.feather as feather
import pyarrow.parquet as pq
import fastparquet as fp
df = pd.DataFrame({'one': [-1, np.nan, 2.5],
'two': ['foo', 'bar', 'baz'],
'three': [True, False, True]})
print("pandas df to disk ####################################################")
print('example_feather:')
%timeit feather.write_feather(df, 'example_feather')
# 2.62 ms ± 35.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
print('example_parquet:')
%timeit pq.write_table(pa.Table.from_pandas(df), 'example.parquet')
# 3.19 ms ± 51 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
print()
print("for comparison:")
print('example_pickle:')
%timeit df.to_pickle('example_pickle')
# 2.75 ms ± 18.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
print('example_fp_parquet:')
%timeit fp.write('example_fp_parquet', df)
# 7.06 ms ± 205 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)
print('example_hdf:')
%timeit df.to_hdf('example_hdf', 'key_to_store', mode='w', table=True)
# 24.6 ms ± 4.45 ms per loop (mean ± std. dev. of 7 runs, 100 loops each)
print()
print("pandas df from disk ##################################################")
print('example_feather:')
%timeit feather.read_feather('example_feather')
# 969 µs ± 1.8 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
print('example_parquet:')
%timeit pq.read_table('example.parquet').to_pandas()
# 1.9 ms ± 5.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
print("for comparison:")
print('example_pickle:')
%timeit pd.read_pickle('example_pickle')
# 1.07 ms ± 6.21 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
print('example_fp_parquet:')
%timeit fp.ParquetFile('example_fp_parquet').to_pandas()
# 4.53 ms ± 260 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)
print('example_hdf:')
%timeit pd.read_hdf('example_hdf')
# 10 ms ± 43.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
# pandas version: 0.22.0
# fastparquet version: 0.1.3
# numpy version: 1.13.3
# pandas version: 0.22.0
# pyarrow version: 0.8.0
# sys.version: 3.6.3
# example Dataframe taken from https://arrow.apache.org/docs/python/parquet.html
どのように解決するのですか?
-
Parquet 形式は長期保存用に設計されており、Arrow は短期または一時的な保存を目的としています(Arrow は 1.0.0 リリース後にバイナリ形式が安定するため、長期保存により適している可能性があります)。
-
Parquet はエンコードと圧縮のレイヤーが多いため、Feather よりも書き込みコストが高くなります。Feather は、修正されていない生の列方向アローメモリです。将来的にはFeatherに単純な圧縮を追加する予定です。
-
辞書エンコーディング、RLE エンコーディング、およびデータページ圧縮により、Parquet ファイルは Feather ファイルよりもはるかに小さくなることが多いでしょう。
-
Parquetは、多くの異なるシステムでサポートされている分析用の標準的なストレージ形式です。Spark、Hive、Impala、AWSの各種サービス、将来的にはBigQueryなどでもサポートされる予定です。そのため、分析を行う場合、Parquetは複数のシステムでクエリを実行するための参照ストレージ形式として良い選択肢となります。
あなたが示したベンチマークは、読み書きのデータが非常に小さいため、非常にノイズが多くなっています。より有益なベンチマークを得るには、少なくとも 100MB または 1GB 以上のデータを圧縮してみる必要があります。 http://wesmckinney.com/blog/python-parquet-multithreading/
これが役に立つといいのですが
関連
-
pythonを使ったオフィス自動化コード例
-
Python百行で韓服サークルの画像クロールを実現する
-
[解決済み】TypeError: unhashable type: 'numpy.ndarray'.
-
[解決済み] urllib、urllib2、urllib3、requestsモジュールの違いは何ですか?
-
[解決済み] staticmethodとclassmethodの違いについて
-
[解決済み] Pythonのリストメソッドであるappendとextendの違いは何ですか?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] パラメータに**(ダブルスター/アスタリスク)、*(スター/アスタリスク)がありますが、これはどういう意味ですか?
-
[解決済み】__str__と__repr__の違いは何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
PythonによるLeNetネットワークモデルの学習と予測
-
pythonを使ったオフィス自動化コード例
-
Python カメの描画コマンドとその例
-
PyQt5はユーザーログインGUIインターフェースとログイン後のジャンプを実装しています。
-
Pythonコードの可読性を向上させるツール「pycodestyle」の使い方を詳しく解説します
-
Python LeNetネットワークの説明とpytorchでの実装
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】 AttributeError("'str' object has no attribute 'read'")
-
[解決済み】LogisticRegression: Pythonでsklearnを使用して、未知のラベルタイプ: '連続'を使用しています。
-
[解決済み】Python: OverflowError: 数学の範囲エラー