Azure数据湖存储文件列表(GetPathsAsync不返回)

时间:2020-06-09 14:37:05

标签: c# .net azure azure-data-lake-gen2 iasyncenumerable

在列出Azure Data Lake存储中的目录时遇到麻烦。我几乎使用默认模板根据Azure Data Lake Storage Gen2列出文件系统上的目录。我已经将代码包装到单元测试中,但是遇到了JSON序列化问题。这是我从单元测试方法中调用的asnyc任务。

public async Task<List<string>> ListFilesInDirectory(string Directory)
{
    IAsyncEnumerator<PathItem> enumerator =
        _dataLakeFileSystemClient.GetPathsAsync(Directory).GetAsyncEnumerator();
    await enumerator.MoveNextAsync();
    List<string> somelist = new List<string>();

    PathItem item = enumerator.Current;
    while (item != null)
    {
        Console.WriteLine(item.Name);
        somelist.Add(item.Name);
        if (!await enumerator.MoveNextAsync())
        {
            break;
        }

        item = enumerator.Current;
    }

    return somelist;
}

这是我的错误信息。

System.AggregateException HResult = 0x80131500 Message =发生一个或多个错误。 (“ <”是值的无效开头。LineNumber:0 | BytePositionInLine:0。)Source = System.Private.CoreLib StackTrace: 在System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions) System.Threading.Tasks.Task.Wait(Int32毫秒超时, CancellationToken cancelToken() System.Threading.Tasks.Task.Wait()在 HistoricMarketDataLibTests.HistoricIceDataManagerTests.DirectoryListing(String 目录)中 C:\ Users \ bbf22 \ source \ repos \ HistoricMarketDataClient \ BarDefinitionTests \ HistoricIceDataManagerTests.cs:line 143

此异常最初是在此调用堆栈上抛出的: System.Text.Json.ThrowHelper.ThrowJsonReaderException(参考System.Text.Json.Utf8JsonReader,System.Text.Json.ExceptionResource, 字节,System.ReadOnlySpan) System.Text.Json.Utf8JsonReader.ConsumeValue(字节) System.Text.Json.Utf8JsonReader.ReadFirstToken(字节) System.Text.Json.Utf8JsonReader.ReadSingleSegment() System.Text.Json.Utf8JsonReader.Read() System.Text.Json.JsonDocument.Parse(System.ReadOnlySpan,System.Text.Json.Utf8JsonReader,ref System.Text.Json.JsonDocument.MetadataDb,参考 System.Text.Json.JsonDocument.StackRowStack) System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory,System.Text.Json.JsonReaderOptions,byte []) System.Text.Json.JsonDocument.Parse(System.ReadOnlyMemory,System.Text.Json.JsonDocumentOptions) System.Text.Json.JsonDocument.Parse(字符串,System.Text.Json.JsonDocumentOptions) Azure.Storage.Files.DataLake.ErrorExtensions.CreateException(string, Azure.Core.Pipeline.ClientDiagnostics,Azure.Response) ... [通话堆栈被截断]

内部异常1:JsonReaderException:'<'是a的无效开头 值。行号:0 | BytePositionInLine:0。

我得到Item = null,所以它根本不会遍历Pathitems。我不知道这是否与某些服务请求限制有关,因为数据存储量很大,但是我希望得到某种合理的错误代码消息。我想知道JSON序列化问题的背后是什么。这与调用的异步任务有关吗?我还应该提到,可以在指定时查询文件夹或文件的存在,但是每当调用GetPathAsyncGetPath时,我都会遇到麻烦。但是涉及的文件和文件数量很大。我不知道这是否会引起某种服务请求问题,是否应该考虑在基于SQL的后端中映射文件位置。

我还应该说,使用R Azure RMR查询某些子文件夹的内容已经取得了一些成功。但是,查询其中任何一个的父母将花费很多时间。虽然使用上述方法无法成功查询.net中的任何子文件夹,但我仍然认为这可能与某些任务未及时返回结果有关?但是话又说回来,这只是我在没有根据的猜测。

我将不胜感激。远远不是Azure .NET API和异步任务的专家。

0 个答案:

没有答案