LoginSignup
1
0

More than 3 years have passed since last update.

PySparkDataFrameからPandasDataFrameへの変換でメモリエラーになるときの対処法

Posted at

はじめに

SparkのDataFrameで作ったデータをPythonの各モジュールで使いたい時、toPandas()メソッドを利用してPandasのDataFrameに変換するが、その際にメモリエラーが起きる場合がしばしばある。
メモリに載せられるように試行錯誤した中で、有効そうなものをまとめた。

もっといい手段がありそうなので、ご存じの方は是非教えてください!

やり方

daskを利用して変換する

sparkによる変換は、spark.driver.memoryspark.driver.maxResultSizeの影響を受けるが、daskの場合はそれがないため、エラーを回避しやすい。

daskを利用した変換
import dask.dataframe as dd

df.write.parquet(parquet_path)
dask_df = dd.read_parquet(parquet_path)
pandas_df = dask_df.compute()

データ型を変更する

バイト数を削減するように、変数のデータ型を変更する。

※勿論、バイト数を削減することで、その後の演算の精度は損なわれる

データ型を変更
# 例えば、int32型(4バイト)をint8型(1バイト)へ変換する
dask_df = dask_dt.astype({k: 'int8' for k in dask_df.dtypes[dask_df.dtypes == 'int32'].index})
1
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0