■ はじめに
AWS Glue 上で RDD.saveAsTextFile() を使ったら エラー「DirectOutputCommitter not found」が発生したので その際のトラブルシュートをメモする。
目次
【1】エラー内容 【2】発生したコード(一部) 【3】解決案 案1:DirectFileOutputCommitterを適用する 案2:Data Frame に変換して別メソッドで実行する
【1】エラー内容
ERROR [main] glue.ProcessLauncher (Logging.scala:logError(70)): Exception in User Class: java.lang.RuntimeException : java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.mapred.DirectOutputCommitter not found
【2】発生したコード(一部)
# 一部抜粋 output_path = "s3://your-bucket-name/xxxx/output" # ★ここでエラーが発生する★ rdd.saveAsTextFile(output_path)
【3】解決案
以下をあげておく。 案1:DirectFileOutputCommitterを適用する 案2:Data Frame に変換して別メソッドで実行する
案1:DirectFileOutputCommitterを適用する
* 以下のサイトに記載されていた。
修正コード
from pyspark.context import SparkContext from awsglue.context import GlueContext spark_context = SparkContext() glue_context = GlueContext(spark_context) spark = glue_context.spark_session # 以下のコードを呼び出し前に追加する spark._jsc.hadoopConfiguration() \ .set("mapred.output.committer.class", "org.apache.hadoop.mapred.DirectFileOutputCommitter")
参考文献
https://qiita.com/uryyyyyyy/items/e9ec40a8c748d82d4bc4
案2:Data Frame に変換して別メソッドで実行する
RDD => Data Frame に変換してから、write() で対応。
修正コード
from pyspark.sql imort Row # データによっては、Rowでデータ構造を定義してあげないと、 # 例外「TypeError: Can not infer schema for type <class 'str'>」で落ちた # 詳細は関連記事「PySpark ~ RDD <=> DataFrame の相互変換 ~」を参照 # https://dk521123.hatenablog.com/entry/2021/05/19/143043 data_frame = rdd.map(Row("val")).toDF() # writeメソッドでファイル出力 data_frame.write \ .format("text") \ .option("header", "false") \ .mode("overwrite") \ .save("<path>")
関連記事
AWS Glue ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2019/10/01/221926
PySpark ~ 環境構築編 ~
https://dk521123.hatenablog.com/entry/2019/11/14/221126
PySpark ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2021/04/03/004254
PySpark でエラー「Exception: It appears ...」が表示された
https://dk521123.hatenablog.com/entry/2020/07/10/192404
PySpark でエラー「Total size ... is bigger than spark.driver.maxResultSize」が発生する
https://dk521123.hatenablog.com/entry/2021/04/22/131849
PySpark でエラー「Exception: It appears ...」が表示された
https://dk521123.hatenablog.com/entry/2019/10/01/221926
PySparkで入力ファイル名を取得するには
https://dk521123.hatenablog.com/entry/2021/04/12/145133
PySpark ~ RDD <=> DataFrame の相互変換 ~
https://dk521123.hatenablog.com/entry/2021/05/19/143043