【问题标题】:reading CSV file from s3 using spark使用 spark 从 s3 读取 CSV 文件
【发布时间】:2018-04-26 10:49:49
【问题描述】:

我是 Spark 的新手。我有一个场景,我需要从 AWS s3 读取和处理 CSV 文件。这个文件是每天生成的,所以我需要读取和处理它并将数据转储到 Postgres 中。

我想并行处理这个巨大的文件以节省时间和内存。

我想出了两个设计,但我对 spark 有点困惑,因为 spark 上下文需要与所有 s3 存储桶打开连接。

  1. 使用 Spark Streaming 从 s3 读取 CSV 并处理并逐行转换为 JSON 并将 JSON 数据附加到 Postgres 的 JSONB 列中。
  2. 使用 spring & java -> 在服务器上下载文件然后开始处理并将其转换为 JSON。

谁能帮我找到正确的方向?

【问题讨论】:

  • 您将要处理的 S3 对象的估计大小是多少?
  • 您绝对应该选择选项 1,即流式传输文件内容并对其进行处理。由于这种方法比选项 2 好得多,因为您不需要很多资源来实现流式解决方案。
  • @piy26 最初大约为 100 MB。
  • @himanshuIIITian 能否提供一些参考指针。

标签: java spring apache-spark amazon-s3 spring-xd


【解决方案1】:

如果它是每天的,并且只有 100MB,那么您实际上并不需要太多的大型工具。我估计 offers

尝试在本地执行此操作,使用 aws s3 cp 复制到本地系统,然后尝试使用 postgres。

我不会使用任何并行工具;甚至 Spark 也想要使用 32-64MB 的块,所以你不会得到超过 2-3 个工人。如果文件是 .gz,那么您会得到一个。

也就是说,如果你想学习 spark,你可以在 spark-shell 中进行。不过先在本地下载,只是为了节省时间和金钱。

【讨论】:

  • 我有 1000 多个客户每天在 s3 上生成 CSV 文件。我需要获取文件并对其进行处理,并为所有行制作一个 json 文档并插入到 JsonB 列中。
  • 那么,您有 1000 x 100 MB 的 CSV 文件?是的,spark 将与内置的 csv 模块一起使用。未压缩的 CSV 文件可以被分割成块(对于 s3a://,在 fs.s3a.block.size 中设置为 25MB 用于 4 个工作人员/文件)。 .gzip 文件:每个文件一名工作人员。将它全部放入 postgres 会很有趣。按照建议:首先在本地模式下使用 spark-shell
猜你喜欢
  • 2015-12-04
  • 2022-01-13
  • 1970-01-01
  • 2015-08-31
  • 2019-09-14
  • 1970-01-01
  • 2020-02-04
相关资源
最近更新 更多