2015-12-20 16 views
6

Sto usando il seguente codice per salvare un dataframe scintilla per il file JSONCome evitare di generare file CRC e file SUCCESS mentre si salva un DataFrame?

unzipJSON.write.mode("append").json("/home/eranw/Workspace/JSON/output/unCompressedJson.json") 

il risultato di uscita è:

part-r-00000-704b5725-15ea-4705-b347-285a4b0e7fd8 
.part-r-00000-704b5725-15ea-4705-b347-285a4b0e7fd8.crc 
part-r-00001-704b5725-15ea-4705-b347-285a4b0e7fd8 
.part-r-00001-704b5725-15ea-4705-b347-285a4b0e7fd8.crc 
_SUCCESS 
._SUCCESS.crc 
  1. Come faccio a generare un unico file JSON e non un file per ogni linea?
  2. Come posso evitare i file * crc?
  3. Come posso evitare il file SUCCESS?

risposta

8

Se si desidera un singolo file, è necessario fare un coalesce ad una singola partizione prima di chiamare scrittura, in modo da:

unzipJSON.coalesce(1).write.mode("append").json("/home/eranw/Workspace/JSON/output/unCompressedJson.json") 

Personalmente, trovo piuttosto fastidioso che il numero di file di output dipende sul numero di partizioni che hai prima di chiamare write - specialmente se fai un write con un partitionBy - ma per quanto ne so, al momento non ci sono altri modi.

Non so se c'è un modo per disabilitare i file .crc - non ne conosco uno - ma è possibile disabilitare il file _SUCCESS impostando quanto segue sulla configurazione hadoop del contesto Spark.

sc.hadoopConfiguration.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false") 

nota, che si potrebbe anche voler disabilitare la generazione dei file di metadati con:

sc.hadoopConfiguration.set("parquet.enable.summary-metadata", "false") 

A quanto pare, la generazione dei file di metadati richiede un certo tempo (vedi this blog post), ma non sono in realtà così importante (secondo this). Personalmente, li disabilito sempre e non ho avuto problemi.

+0

La domanda è: perché abbiamo bisogno dei file 'CRC' e' _SUCCESS'? I nodi Spark (worker) scrivono i dati simultaneamente e questi file fungono da checksum per la convalida. La scrittura su un singolo file elimina l'idea del calcolo distribuito e questo approccio potrebbe non riuscire se il file risultante è troppo grande. –

Problemi correlati