【发布时间】:2018-04-10 12:17:47
【问题描述】:
我在 Azure Data Lake Store 中有一个分区文件夹结构,其中包含大约 600 万个 json 文件(大小为几 kb 到 2 mb)。我正在尝试使用 Data Bricks 中的 Python 代码从这些文件中提取一些字段。
目前我正在尝试以下方法:
spark.conf.set("dfs.adls.oauth2.access.token.provider.type", "ClientCredential")
spark.conf.set("dfs.adls.oauth2.client.id", "xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx")
spark.conf.set("dfs.adls.oauth2.credential", "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx")
spark.conf.set("dfs.adls.oauth2.refresh.url", "https://login.microsoftonline.com/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxx/oauth2/token")
df = spark.read.json("adl://xxxxxxx.azuredatalakestore.net/staging/filetype/category/2017/*/")
这个例子甚至只读取了部分文件,因为它指向“staging/filetype/category/2017/”。它似乎可以工作,并且当我运行这些命令时会开始一些工作。它只是非常缓慢。
然后是作业 42,这就是缓慢开始的地方。它似乎和工作 41 做同样的活动,只是……慢
感觉和this thread有类似的问题。但是41工作的速度让我怀疑。有更快的方法吗?
【问题讨论】:
-
我在 spark 路由中使用通配符时遇到了一些问题/性能问题。我尽量避免它们,之前扩展所需的路线并使用
spark.read.json("adl://xxxxxxx.azuredatalakestore.net/staging/filetype/category/2017/whatever/*.json")。总之,使用通配符读取叶节点中的一组文件。考虑到 spark 内部会递归调用list()操作,这是相当昂贵的。
标签: apache-spark azure-data-lake databricks