无法对 Azure Data Lake Gen2 文件使用通配符
Posted
技术标签:
【中文标题】无法对 Azure Data Lake Gen2 文件使用通配符【英文标题】:Can't use wildcard with Azure Data Lake Gen2 files 【发布时间】:2021-02-12 08:56:35 【问题描述】:我能够将我的 Data Lake Gen2 存储帐户与我的 Azure ML 工作区正确连接。当尝试从数据存储区读取一组特定的 Parquet 文件时,它会持续很长时间并且不会加载它。
代码如下:
from azureml.core import Workspace, Datastore, Dataset
from azureml.data.datapath import DataPath
ws = Workspace(subscription_id, resource_group, workspace_name)
datastore = Datastore.get(ws, 'my-datastore')
files_path = 'Brazil/CommandCenter/Invoices/dt_folder=2020-05-11/*.parquet'
dataset = Dataset.Tabular.from_parquet_files(path=[DataPath(datastore, files_path)], validate=False)
df = dataset.take(1000)
df.to_pandas_dataframe()
每个 Parquet 文件都有大约。 300KB。文件夹中有 200 个 - 通用且直接来自 Databricks。奇怪的是,当我尝试从完全相同的文件夹中读取一个 parquet 文件时,它运行顺利。
其次,其他包含少于 20 个文件的文件夹也将顺利运行,因此我排除了这是由于某些连接问题造成的可能性。更奇怪的是,我尝试了如下通配符:
# files_path = 'Brazil/CommandCenter/Invoices/dt_folder=2020-05-11/part-00000-*.parquet'
理论上这只会引导我到00000
文件,但它也不会加载。超级诡异。
为了克服这个问题,我尝试通过 ADLFS 与 Dask 连接到数据湖,并且它可以正常工作。我知道这可能是处理“大型”数据集/文件的一种解决方法,但是直接从 Dataset 类方法中进行处理会非常好。
有什么想法吗?
编辑:错字
【问题讨论】:
1) 您使用的是什么 SDK 版本? 2) 你能包括你得到的错误的堆栈跟踪吗? @AndersSwanson SDK 版本 1.17.0。并且没有特别出现错误。它只是永远停留在 Jupyter [ * ] 上的运行标志中 经过进一步调查,几乎可以肯定该问题与目录中的“=”字符串有关。 my reaction 【参考方案1】:如果您使用以下命令更新某些软件包,则可以解决该问题:
pip install --upgrade azureml-dataprep azureml-dataprep-rslex
正如微软的一些人告诉我的,这将在下一次 azureml.core 更新中得到解决。
【讨论】:
以上是关于无法对 Azure Data Lake Gen2 文件使用通配符的主要内容,如果未能解决你的问题,请参考以下文章
Azure Databricks 通过服务主体访问 Azure Data Lake Storage Gen2
Azure Databricks - 从 Gen2 Data Lake Storage 运行 Spark Jar
Azure Data Lake Storage Gen2 REST API - 列出文件系统 - “代码”:“AuthorizationPermissionMismatch
如何使用租户 ID、客户端 ID 和客户端密码连接和管理 Azure Data Lake Storage Gen2 中的目录和文件?