如何使用Spark DF/DS直接读取.gz格式的制表符分隔CSV文件?
可以直接用Spark DataFrame/Dataset读取.gz压缩的制表符分隔CSV文件吗?
当然可以!Spark原生就支持直接读取.gz格式的压缩文件,而且对于制表符分隔的CSV(也就是TSV文件),只需要简单配置读取参数就行,完全不用你手动先解压文件,非常方便。
具体读取方法
1. Scala 示例
import org.apache.spark.sql.SparkSession val spark = SparkSession.builder() .appName("Read Gzipped TSV") .master("local[*]") // 本地测试用,生产环境请移除 .getOrCreate() // 读取.gz压缩的TSV文件 val df = spark.read .option("sep", "\t") // 指定分隔符为制表符 .option("header", "true") // 如果文件包含表头,启用这个参数 .option("inferSchema", "true") // 自动推断列类型,*生产环境推荐手动指定schema* .csv("/path/to/your/file.tsv.gz") // 预览数据 df.show()
2. Python 示例
from pyspark.sql import SparkSession spark = SparkSession.builder \ .appName("Read Gzipped TSV") \ .master("local[*]") # 本地测试用,生产环境请移除 .getOrCreate() # 读取.gz压缩的TSV文件 df = spark.read \ .option("sep", "\t") \ .option("header", "true") # 文件有表头时启用 .option("inferSchema", "true") # 自动推断列类型,*生产环境推荐手动定义schema* .csv("/path/to/your/file.tsv.gz") # 预览数据 df.show()
关键细节说明
- 自动识别压缩格式:Spark会自动检测文件的
.gz后缀,自动调用对应的压缩解码器处理,不需要额外设置compression参数。 - 手动指定Schema(推荐生产环境):自动推断schema虽然便捷,但数据量较大时会增加读取耗时,还可能出现类型推断错误。你可以手动定义精准的schema,示例如下(Scala版本):
import org.apache.spark.sql.types._ val customSchema = StructType(Array( StructField("user_id", StringType, nullable = true), StructField("age", IntegerType, nullable = true), StructField("score", DoubleType, nullable = true) )) val df = spark.read .option("sep", "\t") .schema(customSchema) .csv("/path/to/your/file.tsv.gz") - 批量读取支持:如果你的目标目录下有多个.gz压缩的TSV文件,直接传入目录路径即可,Spark会自动遍历并读取所有符合条件的文件。
内容的提问来源于stack exchange,提问作者prady
相关产品推荐
相关产品推荐

