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

无需挂载或安装库,如何从Databricks导出PySpark/Pandas DataFrame至Azure Blob存储?

可以实现,分两种场景说明:

PySpark DataFrame 保存方案

无需挂载容器,也不用第三方库,利用Spark原生支持的Azure Blob存储路径格式(abfss:// 或 wasbs://),配合Azure身份认证即可完成保存。

核心步骤:

  1. 配置身份认证(二选一,根据集群权限选择):

    • 服务主体认证:在代码中直接设置Spark配置,无需提前挂载:
      spark.conf.set("fs.azure.account.auth.type.<storage-account>.dfs.core.windows.net", "OAuth")
      spark.conf.set("fs.azure.account.oauth.provider.type.<storage-account>.dfs.core.windows.net", "org.apache.hadoop.fs.azurebfs.oauth2.ClientCredsTokenProvider")
      spark.conf.set("fs.azure.account.oauth2.client.id.<storage-account>.dfs.core.windows.net", "<你的客户端ID>")
      spark.conf.set("fs.azure.account.oauth2.client.secret.<storage-account>.dfs.core.windows.net", "<你的客户端密钥>")
      spark.conf.set("fs.azure.account.oauth2.client.endpoint.<storage-account>.dfs.core.windows.net", "https://login.microsoftonline.com/<你的租户ID>/oauth2/token")
      
    • SAS Token认证:直接在Blob路径中附带SAS令牌,无需额外配置:
      sas_token = "<你的SAS令牌>"
      blob_path = f"wasbs://<容器名>@<存储账户名>.blob.core.windows.net/目标路径?{sas_token}"
      
  2. 保存DataFrame:使用Spark原生支持的格式(Parquet、CSV、JSON等),无需第三方库:

    # 示例:保存为Parquet(推荐,高效压缩且保留Schema)
    df.write.mode("overwrite").parquet("abfss://<容器名>@<存储账户名>.dfs.core.windows.net/目标路径/df.parquet")
    
    # 示例:保存为带表头的CSV
    df.write.mode("overwrite").option("header", "true").csv("abfss://<容器名>@<存储账户名>.dfs.core.windows.net/目标路径/df.csv")
    

注意:如果必须保存为Excel格式,Spark原生不支持该格式,必须依赖第三方库(如你之前用的com.crealytics.spark.excel),这种场景下无法满足"不安装第三方库"的要求,建议改用Parquet或CSV等原生格式。

Pandas DataFrame 保存方案

同样无需挂载和第三方库,可通过两种方式实现:

方式1:转换为PySpark DataFrame后复用上述方案

这是最简洁的方式,直接利用PySpark的原生能力:

# 将Pandas DataFrame转为PySpark DataFrame
spark_df = spark.createDataFrame(pandas_df)

# 按PySpark的方式保存到Blob存储
spark_df.write.mode("overwrite").parquet("abfss://<容器名>@<存储账户名>.dfs.core.windows.net/目标路径/df.parquet")

方式2:本地临时文件+Databricks工具复制

如果需要保留Pandas原生写入逻辑,可先保存到集群本地临时路径,再用dbutils.fs复制到Blob:

# 保存到集群本地临时路径
temp_path = "/tmp/local_df.parquet"
pandas_df.to_parquet(temp_path)

# 复制到Azure Blob存储(需先完成身份认证配置,同PySpark部分)
dbutils.fs.cp(f"file:{temp_path}", "abfss://<容器名>@<存储账户名>.dfs.core.windows.net/目标路径/df.parquet")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 08:55:21