2015-05-04 17 views
5

Ho migliaia di file compressi di dimensione 2 GB seduti in HDFS. Sto usando la scintilla per elaborare questi file. Sto usando il metodo Spark textFile() per caricare i file da HDFS. La mia domanda è come posso ripartizionare i dati in modo che io possa elaborare ogni file in parallelo. Attualmente ogni file .gz viene elaborato in una singola attività. Quindi, se elaboro 1000 file, vengono eseguite solo 1000 attività. Capisco, che i file compressi non sono divisibili. Ma c'è qualche altro approccio che potrei usare per eseguire il mio lavoro più velocemente?Come ripartizionare un file compresso in Apache Spark?

risposta

3

È possibile utilizzare rdd.repartition(#partitions) dopo aver caricato il file. Questo ha un costo shuffle associato, quindi è necessario valutare se il guadagno di prestazioni nelle coperture di parallelizzazione per questo costo di shuffle iniziale.

Un altro modo sarebbe quello di eseguire qualsiasi trasformazione (mappa, filtro, ...) sulla partizione iniziale e utilizzare qualsiasi fase di shuffle già presente nella pipeline per ripartizionare l'RDD. per esempio.

rdd.map().filter().flatMap().sortBy(f, numPartitions=new#ofpartitions) 
+2

questo è ciò che sto facendo attualmente, ma quando si caricano i dati non parallelizza. Per un file esegue solo un'attività durante il caricamento. Mi stavo chiedendo se possiamo parallelizzare durante il caricamento dei dati. – None

+1

@hadooped non che io sappia. Spero che qualcuno lo sappia meglio. – maasg