自定义JSON输出器仅使用一个顶点执行

时间:2018-02-06 06:55:45

标签: azure-data-lake u-sql

我们需要使用JSON分发数据,因此我们编写了一个自定义输出器。我们还为其他供应商输出与csv相同的数据。 经过调查,我发现JSON输出器使用一个顶点,而csv使用5个顶点输出相同的数据,而JSON也需要很长时间。我可以请求行为背后的原因,有没有办法让我们改变这个?

2 个答案:

答案 0 :(得分:2)

实际上你只为JSON获得一个顶点但为CSV获得5个顶点的原因非常简单。

JSON是一种分层数据格式,因此需要整个行集在一个顶点中,因此它知道结构将是什么。即使输出器输出表示行的JSON对象数组,数组的开始和结束也是一种嵌套(你需要知道第一行和最后一行是什么)。

如果您使用了Microsoft U-SQL GitHub页面中的示例输出器,那么该输出器是在启用AtomicFileProcessing的情况下实现的。

CSV是一种扁平的逐行格式。因此,您可以将行集分区为子集并单独序列化它们。没有阻碍并行化的结构。

因此,除非您决定逐行输出1个JSON文档(从而将组合输出转换为无效的JSON文档),否则无法并行化分层输出。

答案 1 :(得分:-1)

我相信你可以在输出位置添加一个通配符,将最终的COMBINE节点从一个顶点转换为与该点的流相等的顶点数。

所以,而不是输出到

filename.json

你会用

文件名{*}。JSON

代替{*}将是表示顶点的数值。