【问题标题】:Spark load Z compressed file using Scala on DatabricksSpark 在 Databricks 上使用 Scala 加载 Z 压缩文件
【发布时间】:2020-05-06 09:18:18
【问题描述】:

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

我知道Scalaspark 可以直接读取gzip 文件(.gz),但是当我尝试将压缩的Z 文件(.Z) 加载到Dataframe 中时它不起作用。

【问题讨论】:

  • 理论上应该得到底层Hadoop实现的支持

标签: 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-16
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2022-08-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多