Верблюд большой CSV-файл

Я пытаюсь обработать большой CSV-файл, содержащий примерно 1 миллион записей, и после чтения строк (строка / строка или фрагментами) мне нужно нажать это camel-flatpack создать карту с именами полей и их значениями.

Мое требование состоит в том, чтобы передать все записи CSV в конфигурацию flatpack и создать из нее файл java.util.map.

Было несколько сообщений в stackru, чтобы решить эту проблему с помощью сплиттера, но мой процесс работает быстро до почти 35000 записей, но после этого он замедляется.

Я пытался даже добавить троттлер, он все еще не работает. Я получаю GC Out Of Memory Error. Я даже подстрелил JAVA_MIN_MEM, JAVA_MAX_MEM, JAVA_PERM_MEM, JAVA_MAX_PERM_MEM но результат тот же. Консоль Hawtio показывает, что JAVA_HEAP_MEMORY примерно через 5-6 мин получается более 95%.

Вот мой фрагмент кода:

    <route id="poller-route"> 
        <from uri="file://temp/output?noop=true&amp;maxMessagesPerPoll=10&amp;delay=5000"/>
        <split streaming="true" stopOnException="false">            
            <tokenize token="\n" />
            <to uri="flatpack:delim:flatpackConfig/flatPackConfig.pzmap.xml?ignoreFirstRecord=false"/>              
        </split>
    </route>

    <route id="output-route">
        <from uri="flatpack:delim:flatpackConfig/flatPackConfig.pzmap.xml?ignoreFirstRecord=false"/>
        <convertBodyTo type="java.util.Map"/>
        <to uri="mock:result"/>
    </route>

1 ответ

Одна потенциальная проблема заключается в том, что когда вы создаете хеш-карты и непрерывно добавляете к ним данные, необходимо заново создать хеш-код. Например, если у меня есть хэш размером 3, и я ввожу в него 0,1,2,3, предполагая, что моя хэш-функция - мод 3, три будут назначены нулевому интервалу, создавая переполнение, поэтому мне нужно либо сохранить переполняет или воссоздает новый хэш.

Я уверен, что именно так java реализует свою хэш-карту, но вы можете попробовать инициализировать начальную емкость вашей хеш-карты с тем, сколько существует записей.

Другие вопросы по тегам