问题标签 [fastavro]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
41 浏览

apache-spark - 对于使用 Spark > 2.4 生成的 avro 文件,Hive 失败并出现异常“..Found topLevelRecord.xx,期待联合..”

我们有一个包含使用 Spark 2.1.x 框架生成的复杂嵌套 avro 文件的庞大数据集的表。这些文件保存在 S3 中并从配置单元外部表中选择。

我公司最近决定将 ETL 解决方案升级到 Spark 2.4.x 框架。这是我的更改

(1) 我从

(2) 我更改了 Spark 2.1 代码,如下所示:

像这样到 Spark 2.4:

(3) 这是我在 hive 上创建的外部表:

(4) 这是我的测试数据: {"popstars":[{"first_name":"Ariana","last_name":"Grande","favorite_color":"Blue","favorite_number":6,"address":[{"city":"Florida","street":"Queens Street"},{"city":"Los Angeles","street":"Hollywood"}]},{"first_name":"Shawn","last_name":"Mendes","favorite_color":"Red","favorite_number":8,"address":[{"city":"Toronto","street":"Kings Street"},{"city":"New York","street":"Manhattan"}]}]}

我现在可以使用 spark 2.4.5 库生成 avro 文件,将此文件保存在位于外部表路径的 s3 中。但是当我从这个 hive (2.4.6) 表中选择 * 时,我得到以下异常

我探索了更多,发现了一些细节

  1. spark 2.4.x 生成的文件在顶部标题和嵌套结构的标题中有额外的标签 namespace":"topLevelRecord.xxx"。这些标签在 Spark < 2.4 生成的更深层次的文件中不存在。

例如 Spark v2.1.0 生成以下 avro 文件架构(仅限 topLevelRecord):

{"type":"record","name":"topLevelRecord","fields":[{"name":"popstars","type":[{"type":"array","items":[{"type":"record","name":"popstars","fields":[{"name":"address","type":[{"type":"array","items":[{"type":"record","name":"address","fields":[{"name":"city","type":["string","null"]},{"name":"street","type":["string","null"]}]},"null"]},"null"]},{"name":"favorite_color","type":["string","null"]},{"name":"favorite_number","type":["long","null"]},{"name":"first_name","type":["string","null"]},{"name":"last_name","type":["string","null"]}]},"null"]},"null"]}]}

Spark v2.4.5 生成以下 avro 文件架构(注意 topLevelRecord 和 topLevelRecord.popstars 标签):

{"type":"record","name":"topLevelRecord","fields":[{"name":"popstars","type":[{"type":"array","items":[{"type":"record","name":"popstars","namespace":"topLevelRecord","fields":[{"name":"address","type":[{"type":"array","items":[{"type":"record","name":"address","namespace":"topLevelRecord.popstars","fields":[{"name":"city","type":["string","null"]},{"name":"street","type":["string","null"]}]},"null"]},"null"]},{"name":"favorite_color","type":["string","null"]},{"name":"favorite_number","type":["long","null"]},{"name":"first_name","type":["string","null"]},{"name":"last_name","type":["string","null"]}]},"null"]},"null"]}]}

  1. 如果我将表属性更改为新模式,我只能选择 spark 2.4.x 生成的文件,但不能再读取使用 spark 2.1.x 生成的旧文件。

  2. 我试图按照这里的建议抑制命名空间标记,但它只抑制顶部标题中的命名空间,但更深层次的命名空间标记保持不变

  3. 我认为此问题可能在此之后开始浮出水面,并且代码发生了更改。但似乎没有建议如何选择已经生成的 avro 文件。

我的问题是如何在 Spark 2.4.5 中更改代码/模式/库,以便我的配置单元(2.3.6)可以成功地从 avro 文件中为 spark 2.1.x 和 spark 2.4 创建的所有文件选择字段。 x 框架?

0 投票
0 回答
31 浏览

postgresql - 当kafka反序列化数据以创建sql插入时,时间戳微秒精度重置为000(?)

对数据使用 avro 模式;有一个名为“时间”的时间戳字段,如下所示:

时间戳微也可以是时间戳毫秒,但我希望包括微秒,这就是我选择它的原因。

这里传递的是:

{'time': datetime.datetime(2022, 1, 10, 6, 52, 53, 511281, tzinfo=)}

问题是当它被反序列化时,我得到类似的东西

2022, 1, 10, 6, 52, 53, 511000 插入数据库。这是剃掉微观。这与什么有关?

这与什么相匹配

0 投票
1 回答
45 浏览

python - Fastavro 无模式阅读器

我对此的后续问题-> [使用 fastavro 从 Kafka 进行 Avro 反序列化]

有没有办法使用 fastavro schemaless_reader() 从 avro 文件(无标题)中读取所有记录?

Schemaless_Reader

0 投票
0 回答
34 浏览

python - Fastavro schemaless_reader 无法使用最新模式反序列化消息

我正在使用 fastavro schemaless_reader 反序列化来自 Kafka 主题的 avro 消息。我注意到一个schema_latest与上一条消息不兼容的问题,这不应该是这种情况,因为schema_latest它只在以前的模式中添加了 2 个字段。

而且我可以使用schema_old.

您能否帮助建议如何使用 fastavro 处理向后兼容的 avro 架构更改?非常感谢您的帮助!

0 投票
1 回答
23 浏览

python - FastAvro 架构问题

我几乎完成了 avro 部分,但我面临着一个巨大的挑战,那就是名称和命名空间。我已经尝试过了,无论我做了什么,我都遇到了错误,即使在引用以下文档时也是如此:docs.oracle.com/cd/E26161_02/html/GettingStartedGuide/avroschemas.html

我的架构标题是: https ://i.ibb.co/TPH8shF/image.png

错误是: https ://i.ibb.co/BCcX6Jd/image.png

但是,当我将架构添加到命名空间时(因为它位于架构文件夹中),出现此错误: https ://i.ibb.co/Z62RwN2/image.png

你们中有人知道可能导致此错误的原因吗?谢谢!

这是文本版本,如果您需要它:

0 投票
2 回答
52 浏览

avro - AvroSerializer:订单簿快照的架构

我有一个 Kafka 集群正在运行,我想将 L2-orderbook 快照存储到一个主题中,该主题有一个 {key:value} 对字典,其中键的类型为 float,如下例所示:

我下面的架构建议不起作用,我很确定这是因为“出价”和“询问”字典中的键不是字符串类型。

KafkaError{code=_VALUE_SERIALIZATION,val=-161,str="no value and no default for bids"}

什么是适当的 avro 模式?