2013-11-11 6 views
-3

У меня есть два того типа CSV-файлов, содержимое первого файла выглядит следующим образом:объединить два больших CSV-файлов

1 13733776062 
2 13535581615 
3 13987993374 
4 13866603331 

Содержание второго файла заключается в следующем:

13535581615|1 
13733776062|0 
13866603331|0 
13987993374|1 

Первый файла формат каждой строки: id number, второй формат файла каждой строки: number flag. У них есть поле отношений: number.

Каждый файл имеет 10 миллионов строк. Теперь я хочу объединить два файла по номерному полю в новый файл, который содержит 3 поля из id,number,flag каждой строки. Я использую Java для этого.

Может ли кто-нибудь сказать мне лучший метод для этой работы, который потребляет более низкое время?

+0

Вы пробовали что-нибудь? –

+0

Здесь лучше разместить код, что вы уже сделали для решения проблемы ... – Imran

+0

Я понятия не имею, данные огромны. – user2546290

ответ

0

Это задача, более подходящая для SQLite, а не для Java. Вы можете сделать это следующим образом:

$ sqlite3 database.db 
sqlite> CREATE TABLE table1 (id int, number int); 
sqlite> .separator " " 
sqlite> .import t1.csv table1 
sqlite> CREATE TABLE table2 (number int, flag int); 
sqlite> .separator "|" 
sqlite> .import t2.csv table2 
sqlite> CREATE TABLE mytable AS 
     SELECT t1.id, t1.number, t2.flag 
     FROM table1 t1, table2 t2 
     WHERE t1.number=t2.number; 
sqlite> SELECT * FROM mytable; 
1|13733776062|0 
2|13535581615|1 
3|13987993374|1 
4|13866603331|0 

Я ожидаю, что он должен работать на 10 миллионов линий очень быстро.

И, конечно же, вы можете использовать SQLite JDBC для создания и доступа к новой базе данных с Java.

Чтобы сделать доступ быстрее, рекомендуется создавать соответствующие индексы.

+0

Требование - не использовать базу данных или встроенную базу данных. Как я могу это сделать? – user2546290

+0

Все, что вам нужно, это [sqlite3 executable] (http://www.sqlite.org/download.html) и использовать мой рецепт. Затем вы можете сохранить вывод последней инструкции SELECT в файл, и все готово. Если вам это не нравится, вам придется сделать это сложным способом - то есть вы сами по себе – mvp

+0

Я думаю, что вы правы. Благодарю вас. – user2546290

Смежные вопросы