【发布时间】:2018-04-05 15:19:32
【问题描述】:
我有一个 360GB 的管道分隔文本文件,压缩 (gzip)。该文件位于 S3 存储桶中。 这是我第一次使用 Spark。我知道您可以对文件进行分区,以允许多个工作节点对数据进行操作,从而获得巨大的性能提升。但是,我正在尝试找到一种有效的方法将我的一个 360GB 文件转换为分区文件。有没有办法使用多个 Spark 工作节点来处理我的一个压缩文件以对其进行分区?不幸的是,我无法控制我只是得到一个大文件的事实。我可以自己解压缩文件并将其分解为多个文件(例如 360 个 1GB 文件),但我只会使用一台机器来执行此操作,而且速度会很慢。我需要使用 Spark 对数据进行一些昂贵的转换,所以我认为对文件进行分区是必要的。我在 Amazon Glue 中使用 Spark,所以我知道它可以扩展到大量机器。另外,我正在使用 python (pyspark)。
谢谢。
【问题讨论】:
-
您已经知道要如何分区了吗?您是否已经有一个好的分区候选者(列)?您希望将来如何处理这些数据?
-
是的,数据有DMA。有 210 个 DMA。这并不完美,因为某些 DMA 会比其他 DMA 拥有更多的数据,但我认为这是我最好的选择。不过,我的问题是如何有效地处理这个 360GB 的文件。
-
但是这个 CSV 文件不是已经分区了吗?它是如何写入/保存的?
-
不,我正在导入的文件没有分区。这是一个单独的 gzip 压缩的 360GB 管道分隔文件。
-
不幸的是,我没有使用 S3 存储的经验。是否可以使用 S3 方法对其进行分区?我不认为你可以从使用 Spark 中受益,除非这个文件无论如何都被分区了,这样你就可以使用多个工作人员来处理它。分区后 - 您可以通过
DMA列重新分区
标签: apache-spark pyspark bigdata