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

从Databricks通过SFTP传输JSON文件及报错求助

Databricks通过SFTP传输JSON文件问题解决指南

错误根源

你安装的com.springml:spark-sftp_2.11:1.1.3是基于Scala 2.11编译的包,但集群用的是Scala 2.12,Scala跨大版本字节码不兼容,直接导致java.lang.NoSuchMethodError这种方法找不到的错误。

修复步骤

1. 替换兼容的SFTP Jar包

删掉现有Scala 2.11版本的jar,换成适配Scala 2.12的版本,推荐用com.springml:spark-sftp_2.12:1.1.5,这个版本支持Scala 2.12和Spark 3.x,能匹配你的集群环境。

2. 完整示例代码

下面是Databricks Notebook可用的完整流程,包含从ADLS读取多JSON文件、写入SFTP的代码:

读取ADLS中的JSON文件

# 替换为你的ADLS实际路径
adls_json_path = "abfss://<容器名>@<存储账户名>.dfs.core.windows.net/folder1/json_files"

# 自动读取路径下所有JSON文件
df = spark.read.format("json").load(adls_json_path)

写入SFTP服务器

# 填写你的SFTP配置
sftp_host = "你的SFTP服务器地址"
sftp_user = "SFTP用户名"
sftp_pwd = "SFTP密码"
sftp_target_dir = "/ftp/files/"  # SFTP上的目标目录

# 执行写入
df.write.format("com.springml.spark.sftp") \
  .option("host", sftp_host) \
  .option("username", sftp_user) \
  .option("password", sftp_pwd) \
  .option("fileType", "json") \
  .mode("overwrite")  # 可选:append/ignore/error
  .save(sftp_target_dir)

(可选)生成单个JSON文件上传

默认Spark会生成多个分区文件,若要传单个文件,可先合并再上传:

# ADLS临时目录,用于存放合并后的文件
temp_adls_path = "abfss://<容器名>@<存储账户名>.dfs.core.windows.net/temp/single_json"

# 合并为单个文件写入临时目录
df.coalesce(1).write.format("json").mode("overwrite").save(temp_adls_path)

# 找到临时目录下的实际JSON文件
temp_files = dbutils.fs.ls(temp_adls_path)
single_json_path = [f.path for f in temp_files if f.name.startswith("part-") and f.name.endswith(".json")][0]

# 读取单个文件并写入SFTP,指定文件名
single_df = spark.read.format("json").load(single_json_path)
single_df.write.format("com.springml.spark.sftp") \
  .option("host", sftp_host) \
  .option("username", sftp_user) \
  .option("password", sftp_pwd) \
  .option("fileType", "json") \
  .option("fileName", "sample.json")  # 指定要生成的文件名
  .mode("overwrite") \
  .save("/ftp/files/")

额外注意点

  • 确保集群已配置ADLS访问权限(比如Service Principal或SAS Token)。
  • 确认SFTP服务器允许Databricks集群的出站IP访问。
  • 若用密钥登录SFTP,可替换password参数为:
    .option("privateKey", "/dbfs/你的私钥路径") \
    .option("passphrase", "私钥密码(如果有)")
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:27:47