1. ホーム
  2. python

[解決済み] ハウツー Pyspark データフレームの永続的な使用とリードバック

2022-02-12 08:17:30

質問

私はpysparkのかなりの初心者なのですが、以下のようなエラーが発生します。
Py4JJavaError: An error occurred while calling o517.showString. で、それはメモリ不足が原因だと読んだことがあります。
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
そこで、この状況を好転させる方法として df.persist() を読み込んでから、再度 永続的な dfなので、教えてほしいです。

  • 与えられた for ループで、いくつかの .join を使用する必要があります。 .persist() ループの内側か最後か?
    for col in columns:
       df_AA = df_AA.join(df_B, df_AA[col] == 'some_value', 'outer').persist()
    
    --> or <--
    
    for col in columns:
       df_AA = df_AA.join(df_B, df_AA[col] == 'some_value', 'outer')
    df_AA.persist()
    
    
  • それができたら、どのように読み返せばいいのでしょうか? df_AA.unpersist() ? sqlContext.read.some_thing(df_AA) ?

本当に初めてなので、出来るだけ説明をお願いします。
ローカルマシン(8GB RAM)で、jupyter-notebooks(anaconda); windows 7; java 8; python 3.7.1; pyspark v2.4.3 を使って実行しています。

解決方法は?

Sparkは遅延評価フレームワークであるため、どのフレームワークにおいても 変換 を呼び出すまで、結合は呼び出されません。 アクション .

だから、あなたがしたことを進めてください

from pyspark import StorageLevel
    for col in columns:
       df_AA = df_AA.join(df_B, df_AA[col] == 'some_value', 'outer')
    df_AA.persist(StorageLevel.MEMORY_AND_DISK)
    df_AA.show()

複数のpersistオプションが用意されているので メモリとディスク は、メモリ上で処理できないデータをDISKに流出させます。

また、GCエラーは、Sparkアプリケーションを実行するために提供されるDRIVERメモリが少ない結果である可能性があります。