我需要访问作业中的多个Azure Blob。示例:对于一项足够简单的任务(例如在文件系统上列出文件),可以通过以下方式简单地为defaultFS实现:
val hc = ss.sparkContext.hadoopConfiguration
val fs = org.apache.hadoop.fs.FileSystem.get(hc)
val files = fs.listFiles(new Path(path))
我只是想在非defaultFS上实现上述目标。我认为可以通过在
core-site.xml
中具有其他fs的相关凭据(或通过执行hc.put("fs.azure.account.key.<blob_name>.blob.core.windows.net", value)
并使用原始路径(wasbs://<container_name>@<blob_name>.blob.core.windows.net/...
)添加配置)来实现此目的,但这会产生FileNotFoundException。如何访问非默认fs(当然,不覆盖defaultFS)?
最佳答案
这在Scala中针对S3和HDFS对我有用。它也应该在Azure上工作。我认为您在初始化文件系统时缺少URI。
import org.apache.hadoop.fs.{FileSystem, FileUtil, Path}
val sparkContext //create spark context or obtain from Spark session
val configuration = sparkContext.hadoopConfiguration
val fs = FileSystem.get(new URI(<url to blob storage>), configuration)
fs.listFiles(<pass org.apache.hadoop.fs.Path>, boolean <recursive or not>)
//You can also use
org.apache.hadoop.fs.FileUtil.listFiles(java.io.File)
关于scala - 列出Scala中非默认文件系统上的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60084205/