PySpark写入文件提示不存在 如何设置参数自动创建目标目录/文件
PySpark写入文件提示不存在问题处理
PySpark 原生的 DataFrameWriter 执行写入操作时,默认就会自动递归创建路径中不存在的父级文件夹,不需要额外添加专门的强制创建参数。你遇到的文件不存在报错,大概率是以下几个原因导致的,可对应排查:
- 检查
OUTPUT_PATH对应的路径配置是否合法:比如路径中包含特殊字符、混淆了本地路径和集群路径(本地运行时指定了仅集群可访问的HDFS路径,或是集群运行时指定了仅你本地设备存在的路径) - 检查
OUTPUT_PATH是否已经作为普通文件存在:PySpark 无法向已存在的普通文件路径下写入分区目录,这种情况需要删除对应文件或是更换写入路径 - 检查当前执行任务的账号是否对目标路径有读写权限:写入HDFS、对象存储等分布式存储时,权限不足的情况下,部分存储服务的报错信息会提示路径不存在
- 检查
mode='append'对应的目标路径下是否存在格式不兼容的旧文件:如果该路径之前写入过非JSON格式的文件,追加写入时读取旧分区元数据失败的报错,很容易被误判为文件不存在
如果需要提前确保路径可用,也可以在执行写入代码前通过Hadoop API主动创建路径,示例代码如下:
# 基于PySpark内置的Hadoop API创建路径,兼容本地路径、HDFS、大部分对象存储路径 hadoop_conf = spark.sparkContext._jsc.hadoopConfiguration() output_path = spark._jvm.org.apache.hadoop.fs.Path(OUTPUT_PATH) fs = output_path.getFileSystem(hadoop_conf) # 递归创建所有不存在的父级目录 fs.mkdirs(output_path) # 原有写入逻辑无需调整 result.repartition(1).write.partitionBy('client', 'payload_type').json(OUTPUT_PATH, mode='append')
内容的提问来源于stack exchange,提问作者tferrari
相关产品推荐
相关产品推荐

