通过scala获取存储在azure数据湖中的文件名列表

Posted

技术标签:

【中文标题】通过scala获取存储在azure数据湖中的文件名列表【英文标题】:To get the list of filename stored in azure data lake through scala 【发布时间】:2018-08-01 08:25:10 【问题描述】:

我需要 databricks notebook 上的 azure 数据湖存储中的文件列表。 我有一个 scala 脚本,但我认为它只能从本地文件系统访问文件。

val path = "adl://datalakename.azuredatalakestore.net"
import java.io._

def getListOfFiles(dir: String): List[String] = 
   val file = new File(dir)
   file.listFiles.filter(_.isFile)
      .filter(_.getName.endsWith(".dat"))
      .map(_.getPath).toList

getListOfFiles(path + "/folder/subfolder/")

但它无法工作并抛出异常错误,如 - java.lang.NullPointerException python/scala 中的任何建议或帮助。

【问题讨论】:

您不能使用标准 IO API 访问分布式 Azure 文件系统。 ***.com/questions/43474304/… 是的,我知道了,但我仍然不知道使用哪个库或任何方法来访问我笔记本上的 azure 文件系统。 【参考方案1】:

如果您正在使用 Azure Databricks,您可以只使用 dbutils:

// Access Azure Data Lake Store
spark.conf.set("dfs.adls.oauth2.access.token.provider.type", "ClientCredential")
spark.conf.set("dfs.adls.oauth2.client.id", "xxx)
spark.conf.set("dfs.adls.oauth2.credential", "xxx")
spark.conf.set("dfs.adls.oauth2.refresh.url", "https://login.windows.net/xxx/oauth2/token")

val path="adl://datalakename.azuredatalakestore.net"
val filelist=dbutils.fs.ls(path)
print(filelist)

如需更多信息,请输入: dbutils.fs.help()

【讨论】:

你知道 dbutils.fs 的导入吗?我无法使用import com.databricks.dbutils_v1.DBUtilsHolder.dbutils 完成这项工作 如果您在数据块中工作,则无需导入它是运行时的一部分 将文件转换为List val files:List[String] = dbutils.fs.ls(path).map(_.path).toList

以上是关于通过scala获取存储在azure数据湖中的文件名列表的主要内容,如果未能解决你的问题,请参考以下文章

更新 Azure 数据湖中的数据

如何在 databricks 工作区中使用 python 获取 azure datalake 存储中存在的每个文件的最后修改时间?

我们是不是能够使用 Snappy-data 更新 Azure 数据湖中的记录?还是仅附加 Azure 数据湖?

列出 Azure blob 存储中不同目录的 blob

Azure Synapse Polybase/外部表 - 仅返回最新文件

是否可以从 flink 作业中触发 spark 作业并从中获取数据?