2015-04-28 10 views
9

Nel tentativo di salvare un dataframe Spark (di oltre 20G) in un unico file JSON in Amazon S3, il mio codice per salvare il dataframe è come questo:risparmiare una grande Spark dataframe come un singolo file JSON in S3

dataframe.repartition(1).save("s3n://mybucket/testfile","json") 

Ma sto ricevendo un errore da S3 "Il tuo caricamento proposto supera la dimensione massima consentita", so che la dimensione massima consentita da Amazon è 5 GB.

È possibile utilizzare il caricamento multipart S3 con Spark? o c'è un altro modo per risolvere questo?

Btw ho bisogno dei dati in un unico file perché un altro utente sta per scaricarlo dopo.

* Im utilizzando apache spark 1.3.1 in un cluster a 3 nodi creato con lo script spark-ec2.

Grazie mille

JG

+0

Ho appena visto che se io uso S3A invece di S3N potrebbe risolvere il mio problema (http://wiki.apache.org/hadoop/AmazonS3), ma la cosa è che la versione hadoop che sto usando (Hadoop 2.0.0-cdh4.2.0) non supporta s3a. Qualche idea? Grazie ancora. – jegordon

risposta

18

Proverei a separare il grande dataframe in una serie di dataframer più piccoli che si aggiungeranno nello stesso file nella destinazione.

df.write.mode('append').json(yourtargetpath) 
+8

@TheRandomSuite: per caso, sai se è possibile evitare il formato hadoopish e memorizzare i dati in un file con un nome di tasto s3 di mia scelta invece della directory con '_SUCCES' e' part- * '? – lisak

+1

Questo ha funzionato anche per me !! Grazie @Jared !! –

-2

s3a non è versione di produzione in Spark credo. Direi che il design non è corretto. la ripartizione (1) sarà terribile (quello che stai dicendo è di fondere tutte le partizioni in una sola). Suggerirei di scaricare il contenuto da una cartella piuttosto che un singolo file

2

Prova questa

dataframe.write.format("org.apache.spark.sql.json").mode(SaveMode.Append).save("hdfs://localhost:9000/sampletext.txt"); 
Problemi correlati