Причина, по которой вы не можете прочитать файл .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 с использованием неизвестных расширений файлов