问题标签 [spark-avro]
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.
apache-kafka - 在 Spark 任务中将数据保存到 ElasticSearch
在通过 Kafka 和 Spark 处理 Avro 消息流时,我将处理后的数据保存为 ElasticSearch 索引中的文档。这是代码(简化):
一切都按预期工作;唯一的问题是性能:保存到 ES 需要一些时间,我想这是因为我为每个 RDD 打开/关闭了一个 ES 传输客户端。Spark文档表明这种方法是非常正确的:据我了解,唯一可能的优化是使用 rdd.foreachPartition,但我只有一个分区,所以我不确定这是否有益。还有其他解决方案可以实现更好的性能吗?
apache-spark - 如何从空 RDD 中读取 Avro 模式?
我正在使用AvroKeyInputFormat
读取 avro 文件:
因为我需要在工作中反思架构,所以我得到了这样的 Avro 架构:
不幸的是,如果 avro 文件path
为空(它们包括 writer 模式,但没有记录),这将失败。
即使没有记录,是否有一种简单的方法可以仅使用 Spark 加载 avro 模式?
apache-spark - 从目录流式传输 avro 文件
我正在尝试从 Avro 文件目录设置结构化流。我们已经有一些非流式代码来处理完全相同的数据,因此流式传输最省力的一步就是重用该代码。
为了转移到 StructuredStreaming,我尝试了以下方法,它以非流方式工作(使用read
而不是readStream
),但在流方式中给了我一个序列化错误。
我得到的异常如下所示。请注意,我无法获得完整的堆栈跟踪,因为我在 Databricks 上并无法访问执行程序日志。我有点不知所措,无法序列化的对象到底是什么。
java - 如何在不知道 avro 模式的情况下在 scala 中读取 Avro Encoded kafka 消息?
我需要编写一个 Scala 或 Java 客户端来从一个主题中读取 Kafka 消息,该主题的消息是 Avro 编码的并且模式会动态变化。
请提出一个解决方案来读取这些消息而不写入 Avro 文件。
apache-spark - Spark Avro 引发:引起:java.lang.IllegalArgumentException:对象不是声明类的实例
我正在尝试创建一个数据框并以 avro 格式写入结果。这给出了主题中提到的 IllegalArgumentException 异常。如果我将它保存为文本文件但在编写 avro 时失败,它可以正常工作。使用 spark 的 java api。使用火花提交。注意:使用 scala 或 spark-shell 时不会出现此错误。
使用的依赖项:-
下面是堆栈跟踪:-
avro - 单一模式中相同类型的 Avro 多条记录
我喜欢在 Avro 模式中多次使用相同的记录类型。考虑这个模式定义
这不是有效的 Avro 架构,并且 Avro 架构解析器失败并显示
org.apache.avro.SchemaParseException:无法重新定义:my.types.OrderBookVolume
我可以通过将 OrderBookVolume 移动到两个不同的命名空间来使类型唯一来解决此问题:
这不是一个有效的解决方案,因为 Avro 代码生成会生成两个不同的类,如果我想将该类型也用于其他事情而不仅仅是 deser 和 ser,这将非常烦人。
此问题与此问题有关: Avro Spark issue #73
通过在命名空间前面加上外部记录名称,增加了同名嵌套记录的区别。他们的用例可能纯粹与存储相关,因此它可能对他们有用,但对我们无效。
有人知道更好的解决方案吗?这是 Avro 的硬性限制吗?
databricks - 错误:未找到:值 SchemaConverters
我正在使用databricks
我的用例,我必须将avro
架构转换为struct type
. 当我搜索时,它说spark-avro
必须SchemaConverters
这样做。但是,我正在使用spark-avro-2.11-4.0
库,当我使用时SchemaConverters
,我得到
“错误:未找到:值 SchemaConverters”。
请帮助解决这个问题。
avro - avro json 附加字段
我有以下 avro 架构
当我使用 Json 解码器和 avro 编码器对 Json 数据进行编码时:
方案 1: 当我传递以下 json 进行编码时,它工作正常:
场景2: 当我在根级别(姓氏)的json中传递附加属性时,它能够编码并且工作正常:
场景3: 当我在数组记录(国家)中添加附加属性时,它会引发以下异常:
我需要让场景#3 工作,任何帮助都会很棒。
java - 使用不同的字段名称在 Java 类上映射 Avro 文件
我遇到了简单的 spark 任务的问题,它读取 Avro 文件,然后将其保存为 Hive parquet 表。
我有 2 种类型的文件,通常它们是相同的,但关键结构有点不同 - 字段名称。
类型 1
类型 2
我正在使用 spark-avro 阅读 Avro。然后像这样将这个DF映射到bean
SomeClass 是一个带有 getter 和 setter 的简单单字段类。
因此,如果我正在阅读 Avro type 1 - 没关系。但是,如果我正在阅读 Avro 类型 2 - 就会发生错误。反之亦然,如果我将字段名称更改为private String id;
我的问题有什么通用的解决方案吗?我找到了@AvroName,但它不允许设置多个名称。谢谢。
google-bigquery - 来自 Avro 的 Bigquery 负载无法从 long 转换为 int
我正在尝试将 avro 文件从谷歌存储加载到大查询表,但遇到了这些问题。我遵循的步骤如下。
- 在 Spark 中创建一个数据框。
通过将这些数据写入 avro 来存储这些数据。
dataframe.write.avro("路径")
将这些数据加载到谷歌存储中。
尝试使用以下命令将数据加载到 google bigquery
bq --nosync load --autodetect --source_format AVRO datasettest.testtable gs://test/avrodebug/*.avro
此命令导致给出此错误。
读取数据时出错,错误消息:Apache Avro 库无法读取数据并出现以下错误:无法解析:“long”与“int”
所以我什至尝试通过指定模式来使用这个命令。bq --nosync load --source_format AVRO datasettest.testtable gs://test/avrodebug/*.avro C1:STRING, C2:STRING, C3:STRING, C4:STRING, C5:STRING, C6:INTEGER, C7:INTEGER ,C8:整数,C9:字符串,C10:字符串,C11:字符串
在这里,我只有 C6、C7 和 C8 具有整数值。即使这也给出了相同的先前错误。
有什么理由让我在 long to int 而不是 long to INTEGER 上得到错误
请让我知道有没有办法通过投射来加载这些数据。