• pyspark 检测任务输出目录是否空,避免读取报错


    前言

    在跑调度任务时候,有时候子任务需要依赖前置任务的输出,但类似读取 Parquet 或者 Orc 文件时,如果不判断目录是否为空,在输出为空时会报错,所以需要 check 一下,此外Hadoop通常在写入数据时会在目录中生成一个名为_SUCCESS的文件来表示写入操作已成功完成,我们在检测时要排除这个文件

    HDFS API 判断

    1. from py4j.java_gateway import java_import
    2. from pyspark.sql import SparkSession
    3. # 初始化SparkSession
    4. spark = SparkSession.builder.appName("Example").getOrCreate()
    5. # 导入Hadoop FileSystem类
    6. java_import(spark._jvm, 'org.apache.hadoop.fs.Path')
    7. java_import(spark._jvm, 'org.apache.hadoop.fs.FileSystem')
    8. # 定义要检查的路径
    9. FEATURE_OUTPUT_PATH = "your_path_here"
    10. # 获取Hadoop Configuration
    11. hadoop_conf = spark._jsc.hadoopConfiguration()
    12. # 获取FileSystem对象
    13. fs = spark._jvm.FileSystem.get(hadoop_conf)
    14. # 检查路径是否存在
    15. path = spark._jvm.Path(FEATURE_OUTPUT_PATH)
    16. if fs.exists(path):
    17. # 获取目录下所有的文件和子目录
    18. status_list = fs.listStatus(path)
    19. non_success_files = [file_status.getPath().getName() for file_status in status_list if
    20. file_status.getPath().getName() != "_SUCCESS"]
    21. # 检查除_SUCCESS文件外是否还有其他文件
    22. if non_success_files:
    23. # 读取Parquet文件
    24. table = spark.read.format('parquet').option('header', 'true').load(FEATURE_OUTPUT_PATH)
    25. else:
    26. print("The directory is empty or only contains a _SUCCESS file.")
    27. else:
    28. print("The path does not exist.")

    本地 Shell 判断

    注意这段脚本能使用的前提是,执行的机器上已经安装和配置了 HDFS 的 shell 命令

    1. import subprocess
    2. out=subprocess.check_output("hadoop fs -ls /tmp/file.txt",shell=True)
    3. out=out.strip()
    4. out=out.split("\n")
    5. for l in out:
    6. if l.endswith(".txt"):
    7. print "file exit"
    8. else:
    9. print "file not exit"
  • 相关阅读:
    VScode 右键菜单加入使用用VSCode打开文件和文件夹【Windows】
    Java项目基于SpringBoot藏区特产销售系统,可作为毕业设计
    测一测现在的温度
    MySQL中的内置函数
    1)SpringBoot简介
    Java安全 CC链6分析
    面试提问:为什么不建议在MySQL中使用 utf8?
    Lumion 和 Enscape 应该选择怎样的笔记本电脑?
    消息中间件介绍
    2022短视频神器历时6个月辛苦全力打造的软件短视频运用工具
  • 原文地址:https://blog.csdn.net/u010454030/article/details/133300710