【问题标题】:Read Massive CSV File From S3从 S3 读取海量 CSV 文件
【发布时间】:2015-12-09 12:54:44
【问题描述】:

我的 S3 上有很大的 csv 文件。 我想导入他们的数据而不将它们下载(复制)到我在 heroku 上的 tmp 文件夹中。 另外我不想将整个文件加载到内存中。 你们能建议我怎么做吗?诸如逐块获取数据之类的事情。

提前致谢。

【问题讨论】:

  • 我认为这只有在亚马逊有一个 api 时才有可能,您可以在其中从文件中请求一组特定的行,而 AFAIK 不存在。我认为您最好的选择是将文件复制到您的服务器上,然后一次读取一行(各种 CSV 库允许您这样做)。这样您就可以避免将所有内容都保存在内存中。我认为您无法避免将其保存在内存中并避免将文件保存在本地。
  • curlwget 都可以将流写入STDOUT,您可能可以直接从管道中读取。你试过这种方法吗?
  • @Michael-sqlbot 啊哈,好主意。这篇文章有一些方法可以做到这一点。 stackoverflow.com/questions/1342583/…

标签: ruby-on-rails csv heroku amazon-s3


【解决方案1】:

好的,我想到了一种方法来做到这一点,这非常低效而且非常愚蠢。但是,如果您决定不将文件保存在您的服务器上,那么这里有一个方法。

您将代码添加到您的应用程序中,该代码以某种形式接受一些数据(例如,一行或许多行),然后相应地创建记录。部署它。

然后,在您的本地计算机上保存文件。编写一个脚本来读取文件(同样,一次一行最好避免内存问题),将其转换为您编写的操作所需的格式,然后将其作为 GET 或 POST 请求发送到您的生产站点。它需要在文件中翻阅时发出大量请求。

就像我说的,这真的很愚蠢而且有点疯狂:你真的应该把文件保存在你的服务器上。

【讨论】:

  • 是的,在阅读了您的 cmets 后,我将文件保存在我的系统上。只是好奇我是否可以直接读取文件。谢谢大家的帮助。
  • 我认为您可以使用@Michael - sqlbot 的流式 CURL,但与仅保存文件相比,这真的不值得。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-14
  • 2015-12-04
相关资源
最近更新 更多