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

这篇具有很好参考价值的文章主要介绍了pyspark 检测任务输出目录是否空,避免读取报错。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

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

HDFS API 判断

from py4j.java_gateway import java_import
from pyspark.sql import SparkSession

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

# 导入Hadoop FileSystem类
java_import(spark._jvm, 'org.apache.hadoop.fs.Path')
java_import(spark._jvm, 'org.apache.hadoop.fs.FileSystem')

# 定义要检查的路径
FEATURE_OUTPUT_PATH = "your_path_here"

# 获取Hadoop Configuration
hadoop_conf = spark._jsc.hadoopConfiguration()

# 获取FileSystem对象
fs = spark._jvm.FileSystem.get(hadoop_conf)

# 检查路径是否存在
path = spark._jvm.Path(FEATURE_OUTPUT_PATH)

if fs.exists(path):
    # 获取目录下所有的文件和子目录
    status_list = fs.listStatus(path)
    non_success_files = [file_status.getPath().getName() for file_status in status_list if
                         file_status.getPath().getName() != "_SUCCESS"]

    # 检查除_SUCCESS文件外是否还有其他文件
    if non_success_files:
        # 读取Parquet文件
        table = spark.read.format('parquet').option('header', 'true').load(FEATURE_OUTPUT_PATH)
    else:
        print("The directory is empty or only contains a _SUCCESS file.")
else:
    print("The path does not exist.")

本地 Shell 判断

注意这段脚本能使用的前提是,执行的机器上已经安装和配置了 HDFS 的 shell 命令文章来源地址https://www.toymoban.com/news/detail-729954.html

import subprocess

out=subprocess.check_output("hadoop fs -ls /tmp/file.txt",shell=True)

out=out.strip()

out=out.split("\n")

for l in out:

if l.endswith(".txt"):

print "file exit"
    else:
        print "file not exit"

到了这里,关于pyspark 检测任务输出目录是否空,避免读取报错的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 头歌:Python开发技术—文件和异常3( 答案+详细注释)第1关:读取文件内容+第2关:素数写入文件+第3关:输出文件目录+第4关:读写json文件

    自己敲一遍这个代码,注释我写的超级详细,一定可以明白! 内容原创,请勿转载  知识点学习参考: 1.基本读写常用指令: 一文搞懂Python文件读写 - 知乎 (zhihu.com) 2.文件遍历知识总结:  (205条消息) python遍历文件夹下的所有文件_python遍历d盘下面所有文件(排除掉文件夹)

    2024年02月05日
    浏览(217)
  • pyspark笔记:读取 & 处理csv文件 (pyspark DataFrame)

    pyspark cmd上的命令 pyspark中是惰性操作,所有变换类操作都是延迟计算的,pyspark只是记录了将要对数据集进行的操作 只有需要数据集将数据返回到 Driver 程序时(比如collect,count,show之类),所有已经记录的变换操作才会执行 注意读取出来的格式是Pyspark DataFrame,不是DataFr

    2024年02月08日
    浏览(43)
  • pycharm pyspark连接虚拟机的hive表 读取数据

    给个demo示例:

    2024年04月13日
    浏览(35)
  • xxljob后台集群部署如何避免重复执行任务

    工作中有一场景,后台部署2个节点,同时注册到执行器内,如何避免任务重复执行呢? 其实xxl-job本身已经考虑到这一点,我们只需要在创建任务的时候这样做就可以了: 路由策略:选择 一致性HASH 阻塞处理策略:选择 丢弃后续调度 引自:xxl-job官网

    2024年02月13日
    浏览(41)
  • 微信小程序如何读取本地云存储txt数据,避免乱码

    找到你的txt文件,重命名为json文件 上传到云存储中,获取File ID 编写js代码 相关技术文档: https://developers.weixin.qq.com/miniprogram/dev/api/file/FileSystemManager.readFile.html

    2024年02月12日
    浏览(50)
  • CDH6.3.2 的pyspark读取excel表格数据写入hive中的问题汇总

    需求:内网通过Excel文件将数据同步到外网的CDH服务器中,将CDH中的文件数据写入hive中。 CDH版本为:6.3.2 spark版本为:2.4 python版本:2.7.5 操作系统:CentOS Linux 7 集群方式:yarn-cluster 一、在linux中将excel文件转换成CSV文件,然后上传到hdfs中。 为何要先转csv呢?主要原因是pysp

    2024年02月07日
    浏览(42)
  • 如何解决字典打开和字典的读取,重复问题的避免【Java语言】

    在Java语言中,常用的解决字典打开和读取的方式是使用Map,例如HashMap或TreeMap。这些数据结构可以存储键值对,其中键是唯一的。因此,通过使用Map,可以 避免重复的问题 。 编写代码时需要着重考虑以下几个方面: 定义Map :需要定义一个Map对象来存储键值对,以便后续的

    2024年02月11日
    浏览(42)
  • 避免使用第三方工具完成电脑环境检测

    在之前配置各种深度学习环境的时候经常需要先检测一下电脑的软硬件环境,其实整个过程比较重复和固定,所以我们是否有可能一键检测Python版本、PIP版本、Conda版本、CUDA版本、电脑系统、CPU核数、CPU频率、内存、硬盘等内容这是很多Deepper苦恼的。这里会从软件开始介绍,

    2024年02月10日
    浏览(62)
  • 避免检测:安卓模拟器/安卓虚拟机/root环境

    如果你想要避免某些安卓应用检测到你正在使用安卓虚拟机,你可以尝试以下方法。但请注意,这些操作可能违反了应用的使用条款,因此请在遵守相关法规和条款的前提下进行操作。 修改虚拟机设备信息:一些应用会检查设备的制造商、型号等信息。你可以使用一些工具来

    2024年02月12日
    浏览(43)
  • 目录打开显示提示文件或目录损坏且无法读取、文件或目录损坏且无法读取的破解之道

        咱们在平日工作时,通常都会将资料放进不同的目录中,方便咱们找到,随着时间的推移就会产生有越来越多目录。最近有位用户了这样一个问题,就是目录无论怎么都无法打开,这样就无法浏览、使用里面的资料了,影响到了咱们的正常使用,那目录文件或目录损坏且

    2024年02月02日
    浏览(90)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包