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

PySpark读取ORC文件时过滤空/不完整文件的问题求助

解决PySpark读取ORC文件时忽略小文件/不完整文件的问题

原代码存在的问题

  • 遍历列表时直接修改原列表file_list,把文件大小数值追加进去,导致列表混杂了文件名和数字,完全偏离筛选有效文件路径的目的。
  • 大小判断逻辑错误:代码中size > 6500是筛选大于6.5KB的文件,而你实际需求是6.5MB,正确的字节数应为6.5 * 1024 * 1024 = 6815744。
  • 未处理路径下的子目录:如果目标路径里存在子文件夹,os.path.getsize会抛出异常,因为无法获取目录的大小。
  • 最终加载数据时仍使用整个根路径,完全没用到前面的筛选结果,等于白做了循环逻辑。

修正后的代码实现

import os
from pyspark.sql import SparkSession

# 初始化SparkSession
spark = SparkSession.builder.appName("ReadValidORC").getOrCreate()

path = "/home/data/raw_data/"
valid_orc_files = []

# 遍历目录(含子目录),筛选符合条件的ORC文件
for root, _, files in os.walk(path):
    for file in files:
        # 只处理ORC后缀的文件
        if file.endswith(".orc"):
            full_path = os.path.join(root, file)
            try:
                file_size = os.path.getsize(full_path)
                # 筛选大于6.5MB的文件
                if file_size > 6815744:
                    valid_orc_files.append(full_path)
            except OSError as e:
                print(f"跳过异常文件: {full_path}, 错误信息: {e}")
                continue

# 加载筛选后的有效文件
if valid_orc_files:
    raw_df = spark.read.format("orc").load(valid_orc_files)
    # 可添加后续数据处理逻辑
    raw_df.show()
else:
    print("未找到符合条件的ORC文件")

补充说明

  • 如果不需要遍历子目录,可将os.walk替换为os.listdir,并增加os.path.isfile(os.path.join(path, file))判断,确保只处理文件。
  • 加入try-except块是为了避免因文件权限、文件被删除等意外情况导致程序崩溃。
  • 明确过滤.orc后缀,可避免加载路径下的其他无关文件。

内容的提问来源于stack exchange,提问作者Buddhadeb Mondal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 09:18:29