Camel大型CSV文件处理问题

时间:2014-08-01 14:17:56

标签: csv file-io apache-camel flatpack

我正在尝试处理大约1百万条记录的大型CSV文件,在读取行(行/行或块)后,我需要将其推送到camel-flatpack以创建带有字段名称的地图,他们的价值观

我的要求是将所有CSV记录提供给flatpack配置并从中生成java.util.map。

stackoverflow上有几个帖子可以通过拆分器来解决这个问题,但我的过程可以快速运行直到35000条记录,但此后它会变慢。

我甚至尝试添加一个节流器,它仍然无法正常工作。我得到GC Out of Memory错误。我甚至提出了我的JAVA_MIN_MEMJAVA_MAX_MEMJAVA_PERM_MEMJAVA_MAX_PERM_MEM,但结果是一样的。 Hawtio控制台显示约5-6分钟后JAVA_HEAP_MEMORY超过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 个答案:

答案 0 :(得分:0)

一个潜在的问题是,当您创建哈希映射并不断向其添加数据时,它需要重新创建哈希值。例如,如果我有大小为3的哈希值,并输入0,1,2,3,假设我的哈希函数是mod 3,则将三个分配给零槽,从而产生溢出,所以我要么需要存储溢出或重新创建新哈希。

我确信这是java实现其hashmap的方式,但您可以尝试将hashmap的初始容量初始化为有多少记录。