Synapse Spark如何正确写入已挂载的ADLS Gen2容器而非主存储?
解决Synapse Spark写入挂载ADLS Gen2容器的路径问题
你的问题出在:直接使用/devbronze/account作为写入路径时,Spark会默认指向Synapse主存储的根目录,而非你通过mssparkutils.fs.mount挂载的容器。以下是几种可行的解决方法:
方法1:用DBFS前缀访问挂载点
挂载后的路径需要通过dbfs:/前缀来标识,这样Spark才能识别到这是挂载的外部存储,而非主存储路径。修改写入代码:
df.write.format("delta").mode("overwrite").save("dbfs:/devbronze/account")
方法2:直接使用ABFSS路径写入
无需依赖挂载操作,直接指定目标ADLS Gen2容器的完整ABFSS路径,这种方式更直接,避免挂载路径的混淆:
df.write.format("delta").mode("overwrite").save("abfss://devbronze@dlsdataxxxxdirdev001.dfs.core.windows.net/account")
方法3:规范挂载路径(推荐)
Synapse中通常将挂载点命名为/mnt/xxx格式,避免与主存储的路径冲突。先重新挂载容器:
mssparkutils.fs.mount( "abfss://devbronze@dlsdataxxxxdirdev001.dfs.core.windows.net", "/mnt/devbronze", { "linkedService":"LS_synapsews" } )
然后用规范路径写入:
df.write.format("delta").mode("overwrite").save("dbfs:/mnt/devbronze/account")
验证挂载有效性
执行以下命令确认挂载是否成功,若能列出devbronze容器内的内容,说明挂载正常:
mssparkutils.fs.ls("/devbronze") # 若用方法3则替换为"/mnt/devbronze"
内容的提问来源于stack exchange,提问作者Sreedhar
相关产品推荐
相关产品推荐

