我是 Spark 新手。我有一个场景,我需要从 AWS s3 读取和处理 CSV 文件。该文件每天都会生成,因此我需要读取并处理它并将数据转储到 Postgres 中。
我想并行处理这个大文件以节省时间和内存。
我提出了两种设计,但我对 Spark 有点困惑,因为 Spark 上下文需要与所有 s3 存储桶打开连接。
- 使用 Spark Streaming 从 s3 读取 CSV 并对其进行处理,然后逐行转换为 JSON,并将 JSON 数据附加到 Postgres 的 JSONB 列中。
- 使用 spring 和 java -> 在服务器上下载文件,然后开始处理并将其转换为 JSON。
谁能帮我找到正确的方向?
最佳答案
如果每天都需要,并且只有 100MB,那么您实际上并不需要太多大型工具。我估计基本下载和处理需要 < 分钟,甚至是远程下载和处理,之后 postgres 负载就会增加。哪个 Postgres offers
尝试在本地执行此操作,使用 aws s3 cp
复制到本地系统,然后尝试使用 postgres。
我不会使用任何并行工具;即使 Spark 也希望使用 32-64MB 的 block ,因此您不会获得超过 2-3 个工作线程。如果文件是 .gz,您将得到一个。
也就是说,如果你想学习 Spark,你可以在 Spark-Shell 中做到这一点。不过,先在本地下载,只是为了节省时间和金钱。
关于java - 使用spark从s3读取CSV文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50041091/