Sax从S3解析大文件
问题描述:
我在s3(50GB)上有一个很大的xml文件。我想将此文件流式传输到sax xml解析器,以便使用ruby进一步处理。我如何在一个环境中做到这一点,我可以在本地下载整个文件,但只能通过tcp从s3流式传输它?Sax从S3解析大文件
我在考虑使用https://github.com/ohler55/ox解析它自己,而https://github.com/aws/aws-sdk-ruby用于访问S3上的文件。我只是不确定如何使用流式方法连接这些部分?
答
最简单的方法是使用mc
。 mc
工具是cat
命令,可以用更简单的方法。
例如,如下所示。这里cat
流式传输你的对象,并将输出cat
输出到从stdinput读取的XML解析器。
$ mc cat s3.amazonaws.com/<yourbucket>/<yourobject> | <your_xml_parser>
这样可以避免在本地下载文件。
此外mc
提供了更多工具来使用Amazon S3兼容云存储和文件系统。它具有可恢复上传,进度条,并行副本等功能。 mc
是用Golang编写的,并在Apache许可证v2下发布。在OS X,Linux和Windows上支持mc
。
https://amolnpujari.wordpress.com/2012/03/31/reading_huge_xml-rb/ –