Attualmente, quando STORE in HDFS, crea molti file di parti.STORE emette un singolo CSV?
C'è un modo per archiviare un singolo file CSV?
Attualmente, quando STORE in HDFS, crea molti file di parti.STORE emette un singolo CSV?
C'è un modo per archiviare un singolo file CSV?
Si può fare questo in pochi modi:
Per impostare il numero di riduttori per tutti opeations Pig, è possibile utilizzare la proprietà default_parallel
- ma questo significa che ogni singolo passo sarà utilizzare un unico riduttore, rendimento decrescente:
set default_parallel 1;
Prima STORE chiamata, se una delle operazioni eseguire è (COGROUP, CROSS, DISTINCT, GROUP, JOIN (interno), ENTRARE (esterno) e ORDER BY), allora tu c un uso la parola chiave PARALLEL 1
per indicare l'uso di un unico riduttore per completare quel comando:
GROUP a BY grp PARALLEL 1;
Vedi Pig Cookbook - Parallel Features per ulteriori informazioni
È inoltre possibile utilizzare il comando getmerge di Hadoop per unire tutti coloro part-* file. Questo è possibile solo se si eseguono gli script Pig dalla shell Pig (e non da Java).
Questo è un vantaggio rispetto alla soluzione proposta: poiché è possibile utilizzare diversi riduttori per elaborare i dati, il lavoro potrebbe essere più veloce, soprattutto se ciascun riduttore emette pochi dati.
grunt> fs -getmerge <Pig output file> <local file>
Grandi cose, Chris, grazie! – JasonA
Non penso che questo sia l'ideale, dal momento che si potrebbe uscire dall'errore di memoria con troppo pochi riduttori su grandi dati di output. – FreeTymeKiyan