【发布时间】:2019-02-19 18:08:13
【问题描述】:
从 Spark RDD,我想将 JSON 数据暂存并存档到 AWS S3。压缩它才有意义,而且我有一个使用 hadoop 的GzipCodec 工作的进程,但有些事情让我对此感到紧张。
当我在这里查看org.apache.spark.rdd.RDD.saveAsTextFile 的类型签名时:
https://spark.apache.org/docs/2.3.0/api/scala/index.html#org.apache.spark.rdd.RDD
类型签名是:
def saveAsTextFile(path: String, codec: Class[_ <: CompressionCodec]): Unit
但是当我在这里检查可用的压缩编解码器时:
https://spark.apache.org/docs/2.3.0/api/scala/index.html#org.apache.spark.io.CompressionCodec
父特征CompressionCodec 和子类型都说:
编解码器的有线协议不能保证跨版本的 Spark 兼容。这旨在用作单个 Spark 应用程序中的内部压缩实用程序
这不好......但没关系,因为 gzip 可能更容易跨生态系统处理。
类型签名说编解码器必须是CompressionCodec的子类型...但我尝试以下保存为.gz,它工作正常,即使hadoop的GzipCodec不是<: CompressionCodec。
import org.apache.hadoop.io.compress.GzipCodec
rdd.saveAsTextFile(bucketName, classOf[GzipCodec])
我的问题:
- 这可行,但有什么理由不这样做……还是有更好的方法?
- 与内置压缩编解码器不同,这会在 Spark 版本(和其他版本)中保持稳健吗?
【问题讨论】:
标签: json scala apache-spark hadoop gzip