【问题标题】:Spark load Z compressed file using Scala on DatabricksSpark 在 Databricks 上使用 Scala 加载 Z 压缩文件
【发布时间】:2020-05-06 09:18:18
【问题描述】:
有没有办法直接读取带有Spark 的.Z(大写)文件扩展名?
我知道Scala 和spark 可以直接读取gzip 文件(.gz),但是当我尝试将压缩的Z 文件(.Z) 加载到Dataframe 中时它不起作用。
【问题讨论】:
标签:
scala
apache-spark
compression
azure-databricks
【解决方案1】:
您无法读取文件.Z 的原因是因为Spark 尝试将文件扩展名与注册压缩编解码器 匹配,并且没有编解码器处理扩展名.Z !!
您所要做的就是扩展GzipCodec 并覆盖getDefaultExtension 方法。
举个例子:
这是我们的 ZgzipCodec.scala
package codecs
import org.apache.hadoop.io.compress.GzipCodec
class ZgzipCodec extends GzipCodec{
override def getDefaultExtension(): String = ".Z"
}
package tests
import org.apache.spark.sql.SparkSession
object ReadingGzipFromZExtension{
val spark = SparkSession
.builder()
.appName("ReadingGzipFromZExtension")
.master("local[*]")
.config("spark.sql.shuffle.partitions", "4") //Change to a more reasonable default number of partitions for our data
.config("spark.app.id", "ReadingGzipFromZExtension") // To silence Metrics warning
.config("spark.hadoop.io.compression.codecs", "codecs.ZgzipCodec") // Custom Codec that process .Z extensions as a common Gzip format
.getOrCreate()
val sc = spark.sparkContext
def main(args: Array[String]): Unit = {
val data = spark.read.csv("/path/file.Z")
data.show()
sc.stop()
spark.stop()
}
}
您可以点击此链接了解更多详情:
Reading compressed data with Spark using unknown file extensions