Spark将大型单Parquet文件转Delta表失败求助
问题背景
集群详情
- Spark 3.4
- 5个executor
- 节点配置:16核、112GB内存
Parquet文件详情
- 第三方提供
- 源文件存储于ADLS
- 单个20GB .parquet文件
- 6800万行数据
- 1599列
- 5034个行组
尝试通过Spark SQL将该文件的部分列(所有行)写入新的Delta表,但即使是简单的count(*)操作也会失败。已尽可能简化操作,例如仅写入最小列的10行,执行如下代码仍失败:
CREATE TABLE db.my_table USING DELTA AS SELECT my_teeny_tiny_column FROM parquet.`abfss://mycontainer@mystorageaccount.dfs.core.windows.net/files/myfile.parquet` LIMIT 10
报错信息:
来自异常节点的容器:container_1722263226188_0007_01_000003,主机:vm-######。退出状态:143。诊断信息:[2024-07-29 20:43:20.686]Container killed on request
尝试将文件从Parquet转写为Parquet也出现相同问题。仅执行查询部分可在Notebook中正常显示,但写入操作始终失败。
解决方向
1. 调整Parquet读取相关配置
该文件列数(1599列)和行组数量(5034个)过多,即使只读取单列,Spark解析元数据时仍可能加载大量冗余信息导致内存溢出。可尝试以下配置:
// 关闭Parquet统计信息加载,减少元数据处理压力 spark.conf.set("spark.sql.parquet.statistics.enabled", "false") // 关闭过滤下推,避免不必要的行组扫描 spark.conf.set("spark.sql.parquet.filterPushdown", "false") // 调整行组处理粒度,避免单个executor处理过多行组 spark.conf.set("spark.sql.parquet.rowGroupSize", "134217728") // 128MB
2. 拆分大文件预处理
先通过Spark提取目标列并拆分为小文件,再写入Delta表,降低单文件处理压力:
// 第一步:提取目标列并写出为小文件Parquet spark.read.parquet("abfss://mycontainer@mystorageaccount.dfs.core.windows.net/files/myfile.parquet") .select("my_teeny_tiny_column") .write .mode("overwrite") .parquet("abfss://mycontainer@mystorageaccount.dfs.core.windows.net/files/temp_small_parquet") // 第二步:从临时小文件创建Delta表 spark.sql(""" CREATE TABLE db.my_table USING DELTA AS SELECT * FROM parquet.`abfss://mycontainer@mystorageaccount.dfs.core.windows.net/files/temp_small_parquet` """)
3. 优化Executor内存与GC配置
退出状态143通常是容器因内存不足被调度器终止,写入阶段的内存需求比查询阶段更高,可调整内存参数:
// 增大executor内存及内存开销 spark.conf.set("spark.executor.memory", "64g") spark.conf.set("spark.executor.memoryOverhead", "16g") // 使用G1GC减少内存碎片,降低GC压力 spark.conf.set("spark.executor.extraJavaOptions", "-XX:+UseG1GC -XX:MaxGCPauseMillis=200")
4. 用Parquet工具预处理文件
借助parquet-tools直接提取目标列生成轻量Parquet文件,再交给Spark处理:
# 提取指定列到新文件(需先将ADLS文件下载到本地,处理后再上传) parquet-tools cat --column my_teeny_tiny_column ./myfile.parquet > ./extracted.parquet
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

