【发布时间】:2010-12-10 04:05:53
【问题描述】:
我正在处理一个需要处理大量(数 GB)逗号分隔值 (CSV) 文件的项目。
我的基本做法如下:
- 创建一个知道如何 阅读所有相关文件
- 用这个对象注册一组对数据感兴趣的监听器
- 读取每个文件的每一行,调度从数据行创建的对象 给每一位听众
- 每个 Listener 决定这条数据是否有用/相关
我想知道在源端进行过滤是否会更好,例如每个侦听器都有一个关联的 Predicate 对象,该对象确定是否应将给定的数据分派给侦听器,在这种情况下,流程看起来更像
- 创建一个知道如何 阅读所有相关文件
- 用这个对象注册一组对
- 读取每个文件的每一行,调度从数据行创建的对象 如果其关联的 Predicate 为数据返回 true,则发送给每个侦听器
最终效果是一样的,只是过滤发生在哪里的问题。
(同样,我拥有一次处理一个条目的这种“数据流”的唯一原因是因为我正在处理千兆字节的 CSV 文件,并且我无法创建集合、过滤它,并且然后处理它 - 我需要随时过滤)
【问题讨论】:
标签: csv filtering data-stream