json - 使用 Wrangler 将 Avro 文件转换为云 Datafusion 中的 JSON
问题描述
我尝试读取 Avro 文件,使用 Wrangler 进行基本转换(删除名称 = Ben 的记录)并将结果作为 JSON 文件写入谷歌云存储。Avro 文件具有以下架构:
{“类型”:“记录”,“名称”:“etlSchemaBody”,“字段”:[{“类型”:“字符串”,“名称”:“名称”}]}
wrangler 中的 转换如下:
以下是 JSON 文件的输出模式: 输出模式
当我运行管道时,它会成功运行并在云存储中创建 JSON 文件。但 JSON 输出为空。尝试预览运行时,我收到以下消息: 警告消息
为什么 gcloud 存储中的 JSON 输出文件为空?
解决方案
使用 Wrangler 进行转换时,GCS 源的默认值为format: text
and body: string
(数据类型);但是,要在 Wrangler 中正确使用 Avro 文件,您需要对其进行更改,您需要将格式设置为blob
并将正文数据类型设置为bytes
,如下所示:
之后,您的管道的预览应该会生成输出记录。接下来你可以看到我的工作示例:
- 样本数据
- 转型
- GCS 接收器的输入记录预览(最终输出)
编辑:
如前所述,您需要设置format: blob
和输出模式,就好像您想在 Wrangler 中将文件解析为 Avro,因为它需要二进制格式的文件内容。body: bytes
另一方面,如果您只想应用过滤器(在 Wrangler 中),您可以执行以下操作:
- 使用 打开文件
format: avro
,请参见 img。 - 根据您的 Avro 文件具有的字段设置输出模式,在本例
name
中为string
数据类型,请参阅 img。 - 仅在 Wrangler 上使用过滤器(此处不解析为 Avro),请参阅 img。
而且这样你也可以得到想要的结果。
推荐阅读
- algorithm - 在最小堆中查找第二个和第三个最小值
- css - 如何有一个带有 vh 的标题背景图像?
- python - 使用 ajax 将数据发布到 django 视图不起作用
- c++ - 用于 c++ 插件的 node.js 结构序列化
- node.js - 使用 Webpack 的 Express 应用程序的文件和文件夹结构
- node.js - 使用heroku托管的Angular Universal服务器端的请求超时
- ms-access - Splitform不更新文本框/标签
- c++ - 巴斯卡拉罪功能
- firebase - 为什么即使在使用 NPM 安装后 Firebase 也会抛出错误?
- python - 使用 SymPy 查找高斯整数中的最大公约数 (GCD)