डेटा विश्लेषण प्रणालियों में उपयोग के लिए दोनों स्तंभ (डिस्क-) भंडारण प्रारूप हैं। दोनों को अपाचे एरो ( अजगर के लिए पायरो पैकेज) के भीतर एकीकृत किया गया है और एरो के साथ एक स्तंभ-स्मृति विश्लेषिकी परत के रूप में मेल करने के लिए डिज़ाइन किया गया है ।
दोनों प्रारूप अलग-अलग कैसे हैं?
जब संभव हो पांडा के साथ काम करते समय क्या आपको हमेशा पंख पसंद करना चाहिए?
उपयोग के मामले क्या हैं जहां पंख लकड़ी की छत और दूसरे रास्ते से अधिक उपयुक्त है ?
अनुबंध
मुझे यहाँ कुछ संकेत मिले https://github.com/wesm/feather/issues/188 , लेकिन इस परियोजना की कम उम्र को देखते हुए, यह संभवतः थोड़ा पुराना है।
गंभीर गति परीक्षण नहीं क्योंकि मैं सिर्फ एक संपूर्ण डेटाफ़ॉर्म को डंपिंग और लोड कर रहा हूं, लेकिन यदि आपने पहले कभी प्रारूप के बारे में नहीं सुना है तो आपको कुछ आभास होगा:
# 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