【问题标题】:Transform Avro file with Wrangler into JSON in cloud Datafusion使用 Wrangler 将 Avro 文件转换为云 Datafusion 中的 JSON
【发布时间】:2020-08-31 11:02:36
【问题描述】:

我尝试读取 Avro 文件,使用 Wrangler 进行基本转换(删除名称 = Ben 的记录)并将结果作为 JSON 文件写入谷歌云存储。 Avro 文件具有以下架构:

{ “类型”:“记录”, “名称”:“etlSchemaBody”, “领域”:[ { “类型”:“字符串”, “名称”:“名称” } ] }

wrangler 中的转换如下: transformation

以下是 JSON 文件的输出架构: output schema

当我运行管道时,它会成功运行,并且 JSON 文件会在云存储中创建。但 JSON 输出为空。 尝试预览运行时,我收到以下消息: warning message

为什么 gcloud 存储中的 JSON 输出文件是空的?

【问题讨论】:

    标签: json avro google-cloud-data-fusion


    【解决方案1】:

    使用Wrangler进行转换时,GCS源的默认值为format: textbody: string(数据类型);但是,要在 Wrangler 中正确使用 Avro 文件,您需要对其进行更改,您需要将格式设置为 blob,将正文数据类型设置为 bytes,如下所示:

    之后,您的管道预览应该会生成输出记录。接下来你可以看到我的工作示例:

    编辑:

    如前所述,如果您想在 Wrangler 中将文件解析为 Avro,则需要将 format: blob 和输出模式设置为 body: bytes,因为它需要二进制格式的文件内容。

    另一方面,如果您只想应用过滤器(在 Wrangler 中),您可以执行以下操作:

    • 使用format: avrosee img打开文件。
    • 根据 Avro 文件具有的字段设置输出架构,在本例中为 namestring 数据类型 see img
    • 仅在 Wrangler 上使用过滤器(此处不解析为 Avro)see img

    这样你也可以得到想要的result

    【讨论】:

    • 太好了,成功了。谢谢。在读取 .avro 文件时选择格式为“blob”而不是“avro”是违反直觉的
    • @AzamatTangirov 这是因为要将文件解析为 Avro,Wrangler 需要二进制格式的文件内容。如果您使用 GCS 源插件将文件作为 Avro 读取,则必须以不同的方式处理文件,您甚至不需要在 Wrangler 中解析文件而只使用过滤器。我用 GCS 源和 Wrangler 玩了一下,找到了使用 Avro 格式的方法。我将编辑我的答案并将其也包括在内。
    猜你喜欢
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-26
    相关资源
    最近更新 更多