有没有办法直接使用 Spark
读取 .Z
(大写)文件扩展名?
我知道带有 spark
的 Scala
可以直接读取 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/