scala - 在 Databricks 上使用 Scala Spark 加载 Z 压缩文件

标签 scala apache-spark compression azure-databricks

有没有办法直接使用 Spark 读取 .Z(大写)文件扩展名?

我知道带有 sparkScala 可以直接读取 gzip 文件 (.gz),但是当我尝试时将压缩的 Z 文件 (.Z) 加载到 Dataframe 中是行不通的。

最佳答案

无法读取文件 .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

关于scala - 在 Databricks 上使用 Scala Spark 加载 Z 压缩文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61631593/

相关文章:

sql-server - 使用 Play 和 Slick 连接到 MSSQL(jtds)

java - Scala 到 Java(函数式编程)

scala - 如何使用scala从数据框中获取字符串列的最大长度?

java - Spark sql 连接 mongo-spark 和 Spark-redshift 连接器的性能问题

python - 将 Shutil.make_archive 与 zipfile.ZIP_STORED 一起使用吗?

javascript - 压缩 gzip 不起作用(expressjs - 压缩库)

scala - 快速获取数据框中的记录数

java - 如何让 Java 中的 Spark 工作 - 无法初始化类 org.apache.spark.util.Utils$

JavaScript 和样式压缩

algorithm - 在重复元素序列中定位第一个元素的最快方法