Mesclar um grande conjunto de dados da maneira mais rápida possível

0

Eu tenho um grande conjunto de dados ~ 100 GB tendo arquivos csv menores ~ 100.000. Desejo mesclar todos os arquivos .csv juntos da maneira mais rápida possível. Os arquivos estão localizados em duas pastas diferentes.

  1. Alguém sugeriu que eu criasse dois arquivos com nomes de arquivo do arquivo de ambas as pastas, e usando o nome do arquivo, faça uma iteração diretório para anexar os arquivos de saída, em vez de usar glob ls * . Como posso conseguir isso usando o Linux? Eu sou relativamente novo nisso, se alguém pode me ajudar, eu apreciaria.
  2. Se houver alguma outra maneira, considerando o conjunto de dados, para alcançar o resultado
por user4943236 15.07.2015 / 08:12

2 respostas

1

Tente algo assim:

find /path/to/dir1 /path/to/dir2 -type f -name '*.csv' -exec cat {} + >/path/to/merged.csv

Certifique-se de não colocar o arquivo mesclado em nenhum dos diretórios de entrada. :)

    
por 15.07.2015 / 09:19
2

Se eu entendi corretamente, você deseja criar um único arquivo (tamanho 100GB?) de todos os seus arquivos. Nesse caso, o gato pode fazer o truque:

cat foo1 foo2 bar1 bar2 > newfile

ou no seu caso

cat folder1/* folder2/* > newfile

que irá pegar todos os arquivos de folder1 e folder2 e mesclá-los (como texto) em newfile. note que o gato apenas acrescenta os arquivos no final (ou seja, adicionando linhas)

Isso, no entanto, manterá os arquivos antigos e, portanto, você precisará do dobro do espaço, portanto também poderá tratá-los individualmente:

for f in folder1/* folder2/* ; do
    cat $f >> newfile && rm $f
done

Dessa forma, cada arquivo é adicionado e removido.

É isso que você estava procurando?

    
por 15.07.2015 / 09:23