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

如何在PySpark中调用org.apache.hadoop.fs.FileUtil.copy()?

PySpark调用Hadoop FileUtil方法失败问题

问题概述

在PySpark脚本中执行HDFS文件操作时,前两项功能正常,仅使用org.apache.hadoop.fs.FileUtil进行文件移动等操作失败:

  • 路径/文件存在性检查(org.apache.hadoop.fs.FileSystem)——正常
  • 创建/删除文件夹(org.apache.hadoop.fs.FileSystem)——正常
  • 路径间文件移动(org.apache.hadoop.fs.FileUtil)——失败,原因未知

已实现代码

获取JVM对象代码

# 获取所有JVM对象
spark = SparkSession.builder.getOrCreate()

hadoopPath = spark._jvm.org.apache.hadoop.fs.Path
hadoopConfiguration = spark._jsc.hadoopConfiguration()
hadoopFs   = spark._jvm.org.apache.hadoop.fs.FileSystem.get(hadoopConfiguration)

# 导入FileUtil未报错
hadoopFu   = spark._jvm.org.apache.hadoop.fs.FileUtil

正常运行的FileSystem操作

path1="hdfs://mycluster/somefolder"
path2="hdfs://mycluster/newfolder"

# 检查文件夹是否存在及是否包含parquet文件(返回文件列表或空列表)
hadoopFs.globStatus(hadoopPath(path + "/*.parquet"))

# 仅检查路径是否存在(返回布尔值)
hadoopFs.exists(hadoopPath(path))

# 在HDFS上创建文件夹
hadoopFs.mkdirs(hadoopPath(path2))

错误详情

尝试调用FileUtil的方法时,提示方法不存在,这些方法属于标准Hadoop/Spark库,但执行失败:

调用list方法报错

执行代码:

hadoopFu.list(path1)

报错信息:

Py4JError: An error occurred while calling z:org.apache.hadoop.fs.FileUtil.list. Trace:
py4j.Py4JException: Method list([class java.lang.String]) does not exist

调用copy方法报错

执行代码:

hadoopFu.copy(path1,path2)

报错信息:

Py4JError: An error occurred while calling z:org.apache.hadoop.fs.FileUtil.copy. Trace:
py4j.Py4JException: Method copy([class java.lang.String, class java.lang.String]) does not exist

疑问

为何找不到这些方法?操作哪里出错了?需要在Python/PySpark封装内完成该操作。


内容的提问来源于stack exchange,提问作者Alex Ortner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 13:27:36