You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:40:41