无法对 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 中的目录和文件?

构建企业级数据湖?Azure Data Lake Storage Gen2不容错过(上)

如何列出另一个订阅中的另一个 Azure Data Lake gen2 存储帐户中的所有文件和子目录