Ich versuche spark.sql.parquet.output.committer.class einzustellen und nichts, was ich tue, scheint die Einstellung zu erhalten, um zu wirken.Wie setze ich spark.sql.parquet.output.committer.class in pyspark
Ich versuche, viele Threads in den gleichen Ausgabeordner zu schreiben, der mit org.apache.spark.sql. parquet.DirectParquetOutputCommitter
arbeiten würde, da es den Ordner _temporary
nicht verwenden würde. Ich erhalte die folgende Fehlermeldung, das ist, wie ich weiß, dass es nicht funktioniert:
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)
Hinweis den Aufruf von org.apache.parquet.hadoop.ParquetOutputCommitter.commitJob
, die Standardklasse.
ich folgendes versucht haben, basierend auf anderen SO Antworten und sucht:
sc._jsc.hadoopConfiguration().set(key, val)
(dies für Einstellungen funktioniert wieparquet.enable.summary-metadata
)dataframe.write.option(key, val).parquet
--conf "spark.hadoop.spark.sql.parquet.output.committer.class=org.apache.spark.sql.parquet.DirectParquetOutputCommitter"
zumspark-submit
Anruf Hinzufügen--conf "spark.sql.parquet.output.committer.class"=" org.apache.spark.sql.parquet.DirectParquetOutputCommitter"
zumspark-submit
Anruf hinzufügen.
Das ist alles, was ich gefunden habe, und nichts funktioniert. Es sieht so aus, als ob es nicht schwer ist, set in Scala erscheint aber unmöglich in Python.
Github Problem: https://github.com/apache/spark/pull/12229 – ksindi