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

Azure无服务器Spark中PySpark数据合并后文件定位及大数据合并咨询

问题解答

一、CSV结果文件的存储位置

你当前使用的/synfs/notebook/46/aml_notebook_mount是Azure ML无服务器Spark节点的临时分布式存储挂载点,这个路径下的文件仅在当前Spark会话存续期间可访问,且不会同步到你的Notebook本地挂载或持久化存储中——这就是你在外部找不到文件,但同一会话内能读取的原因。

会话未结束时查看临时文件

如果Spark会话还在运行,你可以通过PySpark命令查看文件的具体位置:

# 替换为你的实际保存路径后缀
dbutils.fs.ls("/synfs/notebook/46/aml_notebook_mount/your_save_directory")

注意:一旦会话结束,该临时存储内的文件会被自动清理,无法再访问。

持久化保存的正确方式

要让文件能永久留存并可随时访问,你需要将数据写入Azure ML的持久化数据存储(如Azure Blob Storage/ADLS Gen2),示例代码如下:

# 替换为你的数据存储容器和存储账户信息
persistent_path = "abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/your-save-path"
merged_df.write.csv(persistent_path, header=True, mode="overwrite")

之后你可以在Azure ML工作室的「数据存储」页面找到对应容器,或通过Notebook挂载数据存储来访问文件。

二、处理100GB数据合并的注意事项

针对100GB级别的数据合并,结合你当前的Spark节点配置,需重点关注以下几点:

  • 调整执行器资源配置:当前2个执行器(4vCPU/32GB)不足以支撑100GB数据处理,建议增加执行器数量(如8-12个),同时保持每个执行器的资源规格(4vCPU/32GB)或适当升级(如6vCPU/48GB),确保总计算能力和内存能覆盖数据处理需求,避免OOM(内存溢出)。
  • 优化数据分区与避免倾斜:
    • 合并前检查两个数据集的分区数,确保分区大小均匀(建议每个分区1-2GB),可通过repartition()或coalesce()调整。
    • 如果是按某列关联(join),若其中一个数据集较小(如<10GB),可使用broadcast()广播小表,减少shuffle数据量;若关联列存在数据倾斜(某类值占比极高),需对该列加盐(salt)拆分后再关联。
  • 选择高效存储格式:CSV的读写效率和压缩率较低,建议优先使用Parquet或ORC格式;若必须用CSV,开启压缩选项:
    merged_df.write.csv(persistent_path, header=True, mode="overwrite", compression="gzip")
    
  • 内存与资源参数调优:配置Spark内存参数,给执行器预留足够的内存开销,示例:
    spark.conf.set("spark.executor.memoryOverhead", "4g")  # 预留4GB给非堆内存
    spark.conf.set("spark.sql.shuffle.partitions", "200")  # 调整shuffle分区数,避免小分区过多
    
  • 预处理减少数据量:合并前过滤不需要的列、清洗无效数据,降低后续计算和存储的负载。
  • 监控与调试:在Azure ML的Spark作业面板实时监控任务进度,重点关注是否有任务执行时间过长(数据倾斜征兆),及时调整策略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:20:15