2016-06-28 3 views
5

私はspark.sql.parquet.output.committer.classを設定しようとしていますが、設定を有効にすることはできません。pysparkでspark.sql.parquet.output.committer.classを設定する方法

多くのスレッドが同じ出力フォルダに書き込もうとしていますが、これは_temporaryフォルダを使用しないため、org.apache.spark.sql. parquet.DirectParquetOutputCommitterで動作します。

Caused by: java.io.FileNotFoundException: File hdfs://path/to/stuff/_temporary/0/task_201606281757_0048_m_000029/some_dir does not exist. 
     at org.apache.hadoop.hdfs.DistributedFileSystem.listStatusInternal(DistributedFileSystem.java:795) 
     at org.apache.hadoop.hdfs.DistributedFileSystem.access$700(DistributedFileSystem.java:106) 
     at org.apache.hadoop.hdfs.DistributedFileSystem$18.doCall(DistributedFileSystem.java:853) 
     at org.apache.hadoop.hdfs.DistributedFileSystem$18.doCall(DistributedFileSystem.java:849) 
     at org.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81) 
     at org.apache.hadoop.hdfs.DistributedFileSystem.listStatus(DistributedFileSystem.java:849) 
     at org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter.mergePaths(FileOutputCommitter.java:382) 
     at org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter.mergePaths(FileOutputCommitter.java:384) 
     at org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter.commitJob(FileOutputCommitter.java:326) 
     at org.apache.parquet.hadoop.ParquetOutputCommitter.commitJob(ParquetOutputCommitter.java:46) 
     at org.apache.spark.sql.execution.datasources.BaseWriterContainer.commitJob(WriterContainer.scala:230) 
     at org.apache.spark.sql.execution.datasources.InsertIntoHadoopFsRelation$$anonfun$run$1.apply$mcV$sp(InsertIntoHadoopFsRelation.scala:151) 

org.apache.parquet.hadoop.ParquetOutputCommitter.commitJobへの呼び出し、デフォルトのクラスに注意してください。私はそれが動作していないことを知っている方法です、次のエラーが発生し、取得しています。

私は他のSOの答えと検索に基づいて、次のことを試してみた:

  1. sc._jsc.hadoopConfiguration().set(key, val)(これはparquet.enable.summary-metadataなどの設定のための作業を行います)
  2. dataframe.write.option(key, val).parquet
  3. を​​コール
  4. --conf "spark.hadoop.spark.sql.parquet.output.committer.class=org.apache.spark.sql.parquet.DirectParquetOutputCommitter"を追加します
  5. ​​コールに--conf "spark.sql.parquet.output.committer.class"=" org.apache.spark.sql.parquet.DirectParquetOutputCommitter"を追加する。

これはすべて私が見つけたことであり、何も効果がありません。 set in Scalaは難しくないようですが、Pythonでは不可能と思われます。 this comment

答えて

2

アプローチは決定的に私の仕事:

16/06/28 18:49:59 INFO ParquetRelation: Using user defined output committer for Parquet: org.apache.spark.sql.execution.datasources.parquet.DirectParquetOutputCommitter 

をスパークが与える洪水で失われたログメッセージだった、と私は見ていたエラーは無関係でした。とにかく、DirectParquetOutputCommitterがremoved from Sparkになっているので、やはり問題はありません。

+0

Githubの問題:https://github.com/apache/spark/pull/12229 – ksindi

関連する問題