Clojure / Java:在Amazon S3数据流上执行复杂操作时最小化带宽消耗的最有效方法
我正在使用BufferedReader执行对象的流式读取。
我需要用这个对象做两件事:
将它传递给SuperCSV csv阅读器
获取原始线并将它们保持在(Clojure)懒惰序列中
目前,我不得不使用两个不同的BufferedReaders:一个作为SuperCSV CSV读取器类的参数,另一个用于初始化延迟的原始行序列。我实际上两次下载S3对象,这是昂贵的($)和慢。
我的一位同事指出,我正在寻找类似于Unix“tee”命令的东西。一个BufferedReader,它可以以某种方式“分裂”,下载一大块数据,并将一个副本传递给延迟序列和csv阅读器功能将是有用的。
我目前正在调查是否可以将惰性序列包装在BufferedReader中并将其传递给super csv。当将非常大的延迟序列传递给多个消费者时,我遇到了一些Java堆空间问题,所以我有点担心使用这个解决方案。
另一种解决方案是在本地下载文件,然后在此文件上打开两个流。这消除了流式传输背后的原始动机:允许在数据开始到达时立即开始处理文件。
最后的解决方案,也是我认为只有在没有其他工作的情况下才能实现的解决方案是实现我自己的CSV读取器,它返回解析的CSV和原始未解析的行。如果您使用的是一个非常可靠的CSV读取器,它可以返回已解析的CSV数据的Java Hash和原始未解析的行,请告诉我们!
谢谢!
没有找到相关结果
已邀请:
2 个回复
殿虫
肺鬼耙扮群