Sto provando a impostare spark.sql.parquet.output.committer.class e non sembra che le impostazioni abbiano effetto.Come impostare spark.sql.parquet.output.committer.class in pyspark
Sto cercando di scrivere più thread sulla stessa cartella di output, che funzionerebbe con org.apache.spark.sql. parquet.DirectParquetOutputCommitter
poiché non userebbe la cartella _temporary
. Sto ottenendo il seguente errore, che è come so che non funziona:
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)
nota la chiamata al org.apache.parquet.hadoop.ParquetOutputCommitter.commitJob
, la classe predefinita.
Ho provato quanto segue, sulla base di altri SO risposte e ricerche:
sc._jsc.hadoopConfiguration().set(key, val)
(questo funziona per le impostazioni comeparquet.enable.summary-metadata
)dataframe.write.option(key, val).parquet
- Aggiunta
--conf "spark.hadoop.spark.sql.parquet.output.committer.class=org.apache.spark.sql.parquet.DirectParquetOutputCommitter"
alla chiamataspark-submit
- Aggiunta di
--conf "spark.sql.parquet.output.committer.class"=" org.apache.spark.sql.parquet.DirectParquetOutputCommitter"
alla chiamataspark-submit
.
Questo è tutto ciò che sono riuscito a trovare e niente funziona. Sembra che non sia difficile da fare set in Scala ma sembra impossibile in Python.
Problema di Github: https://github.com/apache/spark/pull/12229 – ksindi