【问题标题】:Talend - Process large delimited fileTalend - 处理大型分隔文件
【发布时间】:2015-06-01 14:35:51
【问题描述】:

我有一个关于如何处理包含大量列 (>3000) 的分隔文件的问题。 我尝试使用标准分隔文件输入组件提取字段,但创建模式需要数小时,当我运行作业时出现错误,因为 toString() 方法超过了 65535 字节的限制。那时我可以运行这项工作,但所有的列都搞砸了,我不能再用它们了。

是否可以使用 talend 拆分该 .csv 文件?是否有任何其他可能的处理方式,也许是某种 java 代码?如果您还有任何问题,请随时发表评论。

干杯!

【问题讨论】:

    标签: csv talend


    【解决方案1】:

    您可以在元数据中创建分隔文件的架构,对吗?我测试了包含数百万条记录的 3k 列,甚至不需要 5 分钟就可以加载所有具有数据类型的列名。显然,您不能通过将每一行作为一个单元格来拆分该文件,它可能会超出 talend 中字符串的限制。但是您可以使用 BufferedReader 在 Java 中完成。

    【讨论】:

      【解决方案2】:

      要处理大分隔文件,我们需要为大数据设计的东西,我认为使用此命令将文件加载到 MongoDB 集合是一个不错的选择,而无需在导入文件之前创建 3k 列集合:

      mongoimport --db users --collection contacts --type csv --headerline --file /opt/backups/contacts.csv
      

      之后,您可以使用 ETL 工具轻松处理数据。

      见MongoImprort Ref。

      【讨论】:

      • 感谢您的提示。我什至无法通过 Excel 打开文件。我收到内存不足错误。 Excel 只是没有超过 1.6 GB 的已用内存,并且有很多可用内存,但他总是崩溃:/
      • 已编辑答案,因为 Oracle 的列数有限,我建议使用 MongoDB。
      • 我也想过那种处理方式。我使用的是 Exasol DB,我必须先定义包含所有列的表,然后才能传输它。这就是为什么我一直在寻找某种在 talend 中使用 talend 或 java 组件的解决方案
      • 这就是我建议使用 Mongo db 的原因,因为您可以在不创建表的情况下加载数据,它将使用文件的第一行作为列名 --headerline 的标题。
      • 是的,我刚刚在您的代码行中看到了它,非常感谢。也许在这种情况下它不会起作用,因为某些标题由“”组成。不过没关系,感谢您的解决方案。
      【解决方案3】:

      也许你可以试试uniVocity。它旨在处理处理数据的各种极端情况。

      查看tutorial 看看是否适合您的需求。

      这是一个使用 CSV 输入的简单项目:https://github.com/uniVocity/worldcities-import/

      披露:我是这个库的作者。它是开源免费的(Apache V2.0 许可)。

      【讨论】:

      • 感谢您的建议,但我的回答更侧重于如何通过 talend 或 talend 内的任何类型的开发来实现它。我不知道我是否可以将 uniVocity 集成到 talend 中。你有这方面的经验吗?
      猜你喜欢
      • 1970-01-01
      • 2018-07-03
      • 1970-01-01
      • 2015-10-10
      • 2014-02-18
      • 1970-01-01
      • 2015-02-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多