我遇到了Azure Data Lake Analytics挑战,我正在寻求帮助。
问题
我需要从Azure Data Lake加载一个文件,该文件包含大约150米的JSON数据行,存储为JSON对象数组。该文件大小约为110G。当我尝试加载文件时,ADLA似乎挂起,给出" 0%"几小时的进度以及algebra.xml或其他文件的状态更新。
通过在线文档搜索,似乎ADLA仅限于"单个顶点"用于从存储中提取文件。这看起来很奇怪,但作业图确实为输入节点提供了1个顶点。为了以防万一,我尝试了32 AU工作,但什么也没做。我还让一个1 AU的工作运行了大约3.5个小时,这也没有做任何事情(即从未进行过)。
问题
您知道如何让ADLA读取具有数百万成员对象的大尺寸UTF-8 JSON阵列文件吗?
如果是这样,怎么样?
而且,如果答案使用U-SQL而不需要代码隐藏,那将是非常好的。我可以做到这一点,但我的团队的其他成员不能和我评估ADLA"开箱即用"能力现在。
非常感谢,
Ĵ
PS。其他详细信息
据我所知,由于JsonExtractor,我需要使用JSON格式的数组(如果不是这样的话,请使用plmk)。
我需要使用UTF-8和JSON,因为我的输入数据包含分隔符,主要是由于人们输入文本字段,在线人员喜欢"为了给我们数据人员提供额外的事情,我们一起玩:)
以下是输入文件格式,删除了特殊字符,因为该文件是UTF-8格式。
[{'key':'car'},{'key':'bar'},....,{'key':'yar'}]
通过加载,我的意思是将EXTRACT语句与提供JSONExtractor()的开源程序集一起使用。请注意,JsonExtractor目前需要一个JSON对象数组(至少它是我上次查看源代码时所做的那样)。
以下是演示提取方法的代码段。
#...The below assumes the assembly is loaded to a database named [SOMEDB]
USE DATABASE [SOMEDB];
REFERENCE ASSEMBLY [SOMEDB].[Newtonsoft.Json];
REFERENCE ASSEMBLY [SOMEDB].[Microsoft.Analytics.Samples.Formats];
USING Microsoft.Analytics.Samples.Formats.Json;
@input_dataset = EXTRACT
[ThereAreManyMoreColumnsThanThis] decimal?
,[HundredsOfColumns] string
,[YouGetTheIdea] DateTime
FROM '/a/file/path/where/file/resides.json'
USING new JsonExtractor()
#...Other stuff
答案 0 :(得分:2)
考虑到JSON文档的大小,示例提取器不是为您的用例而设计的。以下是一些建议:
将输入格式从数组更改为一系列行描述的JSON文档。假设每行/文档小于4MB,您可以并行化提取。
将JSON数组拆分为许多文件中的较小数组。
编写自己的自定义提取器。假设您可以识别数组中的每个顶级元素,您甚至可以实现并行提取器(尽管这将是一个高级主题,因为您需要专门处理文件的第一部分和最后部分,并确保您可以处理元素结尾与范围边界不对齐的情况,类似于内置文本提取器所做的事情。在这种情况下,请确保使用JSON解析器的读取器接口,而不是将文档全部加载到内存中。