使用Scala读取Azure Blob Storage文件报错求助
问题分析与解决
- 核心错误:
dbutils.fs.mount的source参数指向了单个CSV文件,而mount操作仅支持挂载容器或容器内的目录,不能直接挂载单个文件,这是Scala代码执行失败的关键原因。 - 修正后的Scala代码:
val containerName = "azsqlshackcontainer" val storageAccountName = "cloudshell162958911" val sas = "?sv=2021-06-08&ss=bfqt&srt=sco&sp=rwdlacupiyx&se=2022-11-16T17:11:59Z&st=2022-11-16T09:11:59Z&spr=https&sig=ZAy5PeZu5jbICr5B%2BFTLLn6C5TMBxrU5WmbLCRfzNu8%3D" val config = "fs.azure.sas." + containerName + "." + storageAccountName + ".blob.core.windows.net" // 挂载整个容器,而非单个文件 dbutils.fs.mount( source = s"wasbs://$containerName@$storageAccountName.blob.core.windows.net/", mountPoint = "/mnt/myfile", extraConfigs = Map(config -> sas) ) // 挂载完成后读取目标CSV文件 val df = spark.read.csv("/mnt/myfile/FoodSales.csv") df.show()
- 补充说明:
- 若只需挂载容器内的特定目录,可将
source修改为s"wasbs://$containerName@$storageAccountName.blob.core.windows.net/目标目录路径" - 若无需持久化挂载,也可直接通过SAS路径读取文件,跳过mount步骤:
- 若只需挂载容器内的特定目录,可将
val df = spark.read.csv(s"wasbs://$containerName@$storageAccountName.blob.core.windows.net/FoodSales.csv?$sas") df.show()
- 确认SAS令牌权限(
sp=rwdlacupiyx)已覆盖挂载及文件读取所需操作,避免因权限不足导致异常
内容的提问来源于stack exchange,提问作者Arun
相关产品推荐
相关产品推荐

