Python での Parquet ファイルの読み取りと書き込み
- Python で Parquet ファイルを読み書きする Parquet インターフェイス
- Python で PyArrow モジュールを使用して DataFrame を Parquet ファイルに書き込む
- Python で PyArrow モジュールを使用して Parquet ファイルのメタデータを読み取る
- Python で Fastparquet エンジンを使用して Parquet ファイルにデータを書き込む
- Python で Fastparquet エンジンを使用して Parquet ファイルを読み取る
- まとめ
この記事では、Python で寄木細工のファイルを読み書きする方法に焦点を当てています。 これらのタイプのファイルは、データを列方向に格納するストレージ システム形式です。
Parquet は、CSV のような行ベースのファイル形式と比較して、パフォーマンスが最適化されたファイル形式です。 Parquet ベースのファイル システムでクエリを実行すると、必要なデータに非常に迅速に焦点を当てることができます。
Python で Parquet ファイルを読み書きする Parquet インターフェイス
Python は、エンジンを使用してデータ フレームに書き込み、寄木細工のファイルを読み取ります。 この記事では、データベースに寄木細工のファイルを書き込むいくつかのエンジンについて説明します。
データ分析システムで使用するために、Apache Parquet プロジェクトは、標準化されたオープンソースの列指向ストレージ形式を提供しています。 Apache Arrow は、Parquet ファイルから読み取ったり、Parquet ファイルに書き込んだりするデータに最適なインメモリ トランスポート レイヤーです。
Python で寄木細工のファイルを読み取る 2つの寄木細工のインターフェイスについて学習します: pyarrow
と fastparquet
。
Python の PyArrow モジュール
Apache Arrow または PyArrow は、インメモリ分析開発プラットフォームです。 ビッグデータシステムがデータを迅速に保存、処理、転送できるようにするテクノロジーのコレクションがあります。
このコードは pyarrow
で Python にバインドされているため、Pandas を使用して寄木細工のファイルを読み書きできます。
pip
と conda
を使えば、pyarrow
を簡単にインストールできます。
pip
の場合、次のコマンドを使用します。
pip install pyarrow
conda
の場合、次のコマンドを使用します。
conda install -c conda-forge pyarrow
Python で PyArrow モジュールを使用して DataFrame を Parquet ファイルに書き込む
Python でデータ フレームを記述し、寄木細工のファイルを読み取る方法を理解するために、以下のプログラムで Pandas テーブルを作成しましょう。
必要なインポートは次の 4つです。
pyarrow
- 寄木細工の製品を書くため。numpy
- 多次元配列用。pandas
- データ フレームの作成用。parquet
-pyarrow
のサブ機能。
このプログラムは、整数、文字列、ブール値などの複数のタイプのデータセットを含むデータフレーム store1
を作成します。 インデックス リストは 'abc'
に設定され、行をアルファベット順に並べます。
変数 table1
では、構文 Table.from_pandas()
を使用して Pandas テーブルが作成されます。 この表は、結果を確認するために印刷されます。
import pyarrow.parquet as pq
import numpy as np
import pandas as pd
import pyarrow as pa
store1 = pd.DataFrame(
{
"first": [5, np.nan, -9],
"second": ["apple", "samsung", "mi"],
"third": [False, False, True],
},
index=list("abc"),
)
table1 = pa.Table.from_pandas(store1)
print(table1)
出力:
C:\python38\python.exe "C:/Users/Win 10/main.py"
pyarrow.Table
first: double
second: string
third: bool
__index_level_0__: string
----
first: [[5,null,-9]]
second: [["apple","samsung","mi"]]
third: [[false,false,true]]
__index_level_0__: [["a","b","c"]]
Process finished with exit code 0
これで、このデータは write_table
を使用して parquet 形式で書き込まれます。 寄木細工のファイルを書き込むとき、write_table()
関数には、さまざまな設定を制御するためのいくつかの引数が含まれています。
data_page_size
- このパラメーターは、列チャンク内のエンコードされたデータ ページのおおよその量を調整します。 現在、1MB がデフォルト値です。flavor
-spark
などの Apache Spark Parquet コンシューマに固有の互換性設定を提供します。version
- これは適切な Parquet 形式のバージョンです。1.0
以上の値は以前のリーダーとの互換性を保証しますが、2.4
以上の値はより多くの Parquet タイプとエンコーディングを有効にします。
このプログラムでは、テーブル table1
と寄木細工の parquet.txt
を書き込むためのネイティブ ファイルで write_table()
パラメータが提供されます。
ファイルの出所は、文字列を使用せずに示すことができます。 次のいずれかが可能です。
- 文字列としてのファイル パス
- ネイティブ
PyArrow
ファイル - Python のファイル オブジェクト
このテーブルを読み取るには、read_table()
関数が使用されます。 変数 table2
を使用してテーブルをロードします。
最後に、この寄木細工のファイルは table2.to_pandas()
を使用して Pandas データフレームに変換され、出力されます。
pq.write_table(table1, "sample_file.parquet")
table2 = pq.read_table("sample_file.parquet")
table2.to_pandas()
print("\n", table2)
出力:
C:\python38\python.exe "C:/Users/Win 10/main.py"
pyarrow.Table
first: double
second: string
third: bool
__index_level_0__: string
----
first: [[5,null,-9]]
second: [["apple","samsung","mi"]]
third: [[false,false,true]]
__index_level_0__: [["a","b","c"]]
Process finished with exit code 0
通常、寄木細工のファイルは巨大なデータ ファイルであり、Python で寄木細工のファイルを読み取ると、読み込みに時間がかかります。 そのため、ファイル全体をロードする代わりに、特定の列を渡してデータをすばやく読み取ることができます。
変数 table3
では、pq.read_table
関数を使用してデータを書き込みます。 パラメータ ブラケット内には、first
と third
の 2つの列が用意されています。
table3 = pq.read_table("parquet.txt", columns=["first", "third"])
print(table3)
出力には、選択した列が表示されます。
出力:
C:\python38\python.exe "C:/Users/Win 10/main.py"
pyarrow.Table
first: double
third: bool
----
first: [[5,null,-9]]
third: [[false,false,true]]
Process finished with exit code 0
ソースとして Pandas データ フレームを使用してファイルから列のサブセットを読み取るときに、read_pandas
を使用して余分なインデックス列データを保持します。
table4 = pq.read_pandas("parquet.txt", columns=["second"]).to_pandas()
print(table4)
出力:
C:\python38\python.exe "C:/Users/Win 10/main.py"
second
a apple
b samsung
c mi
Process finished with exit code 0
文字列ファイル パスまたは NativeFile
のインスタンス (特にメモリ マップ) は、通常、読み取り速度が最も遅い Python ファイル オブジェクトよりも優れたパフォーマンスを発揮します。
pa.Table.from_pandas
を使用してテーブルを Arrow テーブルに変換し、インデックス (行ラベル) を追跡する場合、1つ以上の特別な列が自動的に作成されます。 インデックスに価値がない場合は、preserve index=False
を渡すことで省略できます。これは、インデックスを保存するにはより多くのストレージ スペースが必要になるためです。
import numpy as np
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq
store = pd.DataFrame(
{
"first": [5, np.nan, -9],
"second": ["apple", "samsung", "mi"],
"third": [False, False, True],
},
index=list("abc"),
)
print(store)
table = pa.Table.from_pandas(store, preserve_index=False)
pq.write_table(table, "sample_file.parquet")
t = pq.read_table("sample_file.parquet")
print("\n", t.to_pandas())
表示されている寄木細工のファイルのインデックスは消去されています。
出力:
C:\python38\python.exe "C:/Users/Win 10/main.py"
first second third
a 5.0 apple False
b NaN samsung False
c -9.0 mi True
first second third
0 5.0 apple False
1 NaN samsung False
2 -9.0 mi True
Process finished with exit code 0
Python で PyArrow モジュールを使用して Parquet ファイルのメタデータを読み取る
read_table
メソッドが使用する ParquetFile
クラスは、ファイルからのデータの読み取りに加えて、メタデータの読み取りなどの追加機能を提供します。
import pyarrow.parquet as pq
parquet_file = pq.ParquetFile("example.parquet")
print(parquet_file.metadata)
出力:
C:\python38\python.exe "C:/Users/Win 10/main.py"
<pyarrow._parquet.FileMetaData object at 0x000001DADCBDCA90>
created_by: parquet-cpp-arrow version 9.0.0
num_columns: 4
num_rows: 3
num_row_groups: 1
format_version: 2.6
serialized_size: 2580
Process finished with exit code 0
Python で Fastparquet エンジンを使用して Parquet ファイルにデータを書き込む
これは寄木細工のファイル形式の Python インターフェイスです。
このプログラムは、fastparquet
を使用して寄木細工のファイルに書き込みます。 student
と marks
の 2つの列を持つデータ フレーム store
が作成されます。
データ フレームは、dataframe.to_parquet()
関数を使用して寄木細工のファイル sample.parquet
に書き込まれます。
エンジンは fastparquet
として選択されていますが、pyarrow
に設定することもできます。
import pandas as pd
store = pd.DataFrame(
{
"student": ["Michael", "Jackson", "N", "John", "Cena"],
"marks": [20, 10, 22, 21, 22],
}
)
print(store)
store.to_parquet("sample.parquet", engine="fastparquet")
出力:
C:\python38\python.exe "C:/Users/Win 10/main.py"
student marks
0 Michael 20
1 Jackson 10
2 N 22
3 John 21
4 Cena 22
Process finished with exit code 0
寄木細工のファイルにデータが書き込まれているので、ファイルを読み込んでみましょう。
Python で Fastparquet エンジンを使用して Parquet ファイルを読み取る
寄木細工のファイルは pd.read_parquet
関数を使用して読み取られ、エンジンを fastparquet
に設定し、変数 df
内に保存します。 その後、結果が印刷されます。
df = pd.read_parquet("sample.parquet", engine="fastparquet")
print(df)
出力:
C:\python38\python.exe "C:/Users/Win 10/PycharmProjects/read_parquet/main.py"
student marks
0 Michael 20
1 Jackson 10
2 N 22
3 John 21
4 Cena 22
Process finished with exit code 0
まとめ
この記事では、Python で寄木細工のファイルを読み取る方法について説明します。 プログラムの例では、pyarrow
と fastparquet
の両方を使用して寄木細工のファイルを読み取る方法を示しています。
読者は、Python で寄木細工のファイルを読み取るプログラムを簡単に作成できる必要があります。