如何在Azure Databricks中使用gz文件创建DataFrame?
在Azure Databricks中使用GZ压缩文件创建DataFrame的正确方法
你的代码核心问题是混淆了压缩格式和数据格式:.gz只是文件的压缩后缀,并非数据存储格式(如Parquet、CSV)。Spark会自动识别并解压GZ文件,但你需要根据压缩包内实际的数据格式来指定对应的读取格式,以下是几种常见场景的实现:
场景1:压缩包内为Parquet格式数据
如果原文件是Parquet格式后被GZ压缩,你的代码格式本身正确,若加载失败可显式指定压缩类型验证:
df = spark.read.format("parquet") \ .option("compression", "gzip") \ .load("dbfs:/mnt/datascience/information-mart/Internal/CTR/Product/BASE_CTR_DEAL_DIM/test_20240423.gz") df.createOrReplaceTempView("vw_test")
场景2:压缩包内为CSV格式数据
若压缩包是CSV文件的GZ压缩包,需指定CSV格式并根据数据特性配置参数:
df = spark.read.format("csv") \ .option("header", "true") # 数据含表头则设为true,否则为false .option("sep", ",") # 按实际数据分隔符调整,如\t代表制表符 .option("inferSchema", "true") # 自动推断字段类型,生产环境建议手动指定schema .load("dbfs:/mnt/datascience/information-mart/Internal/CTR/Product/BASE_CTR_DEAL_DIM/test_20240423.gz") df.createOrReplaceTempView("vw_test")
场景3:压缩包内为JSON格式数据
针对JSON格式的GZ压缩文件,直接指定JSON格式读取即可:
df = spark.read.format("json") \ .option("inferSchema", "true") \ .load("dbfs:/mnt/datascience/information-mart/Internal/CTR/Product/BASE_CTR_DEAL_DIM/test_20240423.gz") df.createOrReplaceTempView("vw_test")
场景4:压缩包内为纯文本格式数据
如果是纯文本文件的GZ压缩包,使用text格式读取:
df = spark.read.format("text").load("dbfs:/mnt/datascience/information-mart/Internal/CTR/Product/BASE_CTR_DEAL_DIM/test_20240423.gz") df.createOrReplaceTempView("vw_test")
关键注意事项
- 先确认GZ包内的实际数据格式:可在Databricks UI中右键目标文件,选择"Preview"查看内容结构。
- Spark原生支持GZ、Snappy等主流压缩格式,无需额外解压操作,只需匹配正确的数据格式即可。
- 若需加载目录下多个同格式GZ文件,直接指定目录路径(如
dbfs:/mnt/.../BASE_CTR_DEAL_DIM/)即可,Spark会自动批量加载。
内容的提问来源于stack exchange,提问作者dasa m
相关产品推荐
相关产品推荐

