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

Custom JSON outputter using only one vertex for execution

我们需要使用 JSON 分发数据,因此我们编写了一个自定义输出器。我们还为另一家供应商输出与 csv 相同的数据。 在调查中我发现 JSON 输出器使用一个顶点,而 csv 使用 5 个顶点输出相同的数据并且 JSON 也花费了很长时间。我可以询问行为背后的原因吗?有没有办法让我们改变它?

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

所以,而不是输出到

filename.json

你会用

文件名{*}.json

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

实际上,JSON只有一个顶点而 CSV 有 5 个顶点的原因很简单。

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

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

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

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