Dwa*_*ill 5 bigdata apache-spark pyspark
我有一个 360GB 的管道分隔文本文件,经过压缩 (gzip)。该文件位于 S3 存储桶中。这是我第一次使用 Spark。据我所知,您可以对文件进行分区,以便允许多个工作节点对数据进行操作,从而带来巨大的性能提升。但是,我正在尝试找到一种有效的方法将我的一个 360GB 文件转换为分区文件。有没有一种方法可以使用多个 Spark 工作节点来处理我的一个压缩文件以便对其进行分区?不幸的是,我无法控制我只得到一个巨大文件的事实。我可以自己解压缩该文件并将其分解为许多文件(例如 360 1GB 文件),但我只使用一台机器来执行此操作,并且速度会非常慢。我需要使用 Spark 对数据运行一些昂贵的转换,因此我认为对文件进行分区是必要的。我在 Amazon Glue 中使用 Spark,因此我知道它可以扩展到大量机器。另外,我正在使用 python (pyspark)。
谢谢。
小智 2
如果我没记错的话,TextInputFormat如果您使用SparkContext.textFile. 如果设置了压缩编解码器,则TextInputFormat通过检查代码是否是 的实例来确定文件是否可拆分SplittableCompressionCodec。
我相信GZIP是不可分割的,Spark只能生成一个分区来读取整个文件。
您可以做的是:
1. 之后添加一个重新分区SparkContext.textFile,以便您至少有多个转换处理数据部分。
2. 请求多个文件,而不仅仅是一个 GZIP 文件
3. 编写一个应用程序,在运行 Spark 应用程序之前将文件解压缩并拆分为多个输出文件。
4. 为GZIP 编写自己的压缩编解码器(这有点复杂)。
看看这些链接:
TextInputFormat
TextInputFormat 的源代码
GzipCodec
GZIPCodec 的源代码
这些是用 java 编写的,但我确信它们有等效的 Python/Scala 版本。
| 归档时间: |
|
| 查看次数: |
1628 次 |
| 最近记录: |