Spark загружает сжатый файл Z, используя Scala на Databricks - PullRequest
2 голосов
/ 06 мая 2020

Есть ли способ прочитать расширение файла .Z (заглавное) с Spark напрямую?

Я знаю, Scala с spark может читать gzip файлы (.gz) напрямую, но когда я пытаюсь загрузить сжатый Z файл (.Z) в Dataframe, это не работает.

1 Ответ

3 голосов
/ 06 мая 2020

Причина, по которой вы не можете прочитать файл .Z, заключается в том, что Spark пытается сопоставить расширение файла с зарегистрированными кодеками сжатия , а код c не обрабатывает расширение .Z! !

Все, что вам нужно было сделать, это расширить GzipCodec и переопределить метод getDefaultExtension.

В качестве примера:

Вот наш ZgzipCode c. 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()
  }
}

Вы можете перейти по этой ссылке для получения дополнительных сведений: Чтение сжатых данных с помощью Spark с использованием неизвестных расширений файлов

...