问题标签 [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.

0 投票
1 回答
823 浏览

scala - 如何将十进制逻辑类型读入火花数据帧

我有一个包含十进制逻辑类型的 Avro 文件,如下所示:


当我尝试使用 scala spark 库读取文件时,df 模式是


如何将其转换为十进制类型?

0 投票
2 回答
175 浏览

apache-spark - 零件文件的大小对 Spark SQL 性能有影响吗

我正在尝试查询具有很多部分文件(avro)的 hdfs。最近我们进行了更改以减少并行度,因此零件文件的大小增加了,每个零件文件的大小在 750MB 到 2 GB 的范围内(我们使用 Spark Streaming 以 10 分钟的间隔将日期写入 hdfs,所以这些文件的大小取决于我们从上游处理的数据量)。部分文件的数量约为 500。我想知道这些部分文件的大小/部分文件的数量是否会对 spark SQL 性能起任何作用?

如果需要,我可以提供更多信息。

0 投票
2 回答
6099 浏览

scala - Spark 通过自动分区发现读取多个路径

我正在尝试从多个路径将一些 avro 文件读取到 DataFrame 中。假设我的路径是"s3a://bucket_name/path/to/file/year=18/month=11/day=01" 在这条路径下我还有两个分区让我们说country=XX/region=XX

我想一次读取多个日期而不明确命名国家和地区分区。此外,我希望国家和地区成为此 DataFrame 中的列。

这条线运行良好,因为我只阅读了一条路径。它检测国家和地区分区并推断其架构。

当我尝试阅读多个日期时,让我们说

我收到此错误:

显然我不能使用 basePath 因为路径不共享一个。我还尝试在每条路径的末尾使用 /*,这确实有效,但完全忽略了国家和地区分区。

我可以一一阅读路径并将其合并,但我觉得我错过了一些东西。

知道为什么它仅适用于单个路径以及如何使其适用于多个路径吗?

0 投票
1 回答
2356 浏览

apache-spark-sql - 将 StructType 转换为 Avro Schema,使用 databricks spark-avro 时返回类型为 Union

我正在使用 databricks spark-avro 将数据帧模式转换为 avro 模式。返回的 avro 模式没有默认值。当我尝试从架构中创建通用记录时,这会导致问题。任何人都可以帮助正确使用此功能吗?

这是 df 模式:

这是 avro 转换后的架构:

0 投票
1 回答
1284 浏览

apache-spark - Spark 2.4.0 to_avro / from_avro 反序列化不适用于 Seq().toDF()

我正在测试 Spark 2.4.0 新的 from_avro 和 to_avro 函数。

我创建了一个只有一列和三行的数据框,用 avro 对其进行序列化,然后从 avro 将其反序列化。

如果输入数据集创建为

反序列化只返回最后一行的 N 个副本:

如果我将输入数据集创建为

结果是正确的:

示例代码:

结果:

从测试看来,问题出在反序列化阶段,因为打印 avro 序列化的 df 显示不同的行。

我做错了还是有错误?

0 投票
3 回答
11495 浏览

scala - Spark 读取 Avro 文件

我正在使用 com.databricks.spark.avro。当我像这样从 spark-shell 运行它时:spark-shell --jar spark-avro_2.11-4.0.0.jar,我可以通过这样做来读取文件:

但是,如果我尝试在我的项目中使用 做同样的事情sbt clean run,我会得到:

"com.databricks" %% "spark-avro" % "4.0.0"列在我的依赖项中,它在我的外部库中。我还缺少另一个依赖项吗?

0 投票
1 回答
3372 浏览

apache-spark - spark 2.4 com.databricks.spark.avro 故障排除

我有一个 spark-job,我通常从本地机器提交到 hadoop 集群。当我使用 spark 2.2.0提交它时,它工作正常,但是当我使用2.4.0提交它时无法启动。只是有所作为SPARK_HOME

我提交的工作喜欢

为什么新的spark版本拒绝接受我的uberjar?我在 spark 2.4 文档中没有发现任何变化。顺便说一句:jar 是使用 spark 2.1 作为依赖项构建的。有任何想法吗?

编辑: 我认为我的问题与 spark 未能在我的 uberjar 中找到东西无关更确切地说,我可能对新的内置 avro 功能有疑问。和以前一样,我spark.read.avro使用com.databricks.spark.avro._. Spark 2.4.0 有一些新的内置 avro 东西(大部分都可以在 中找到org.apache.spark:spark-avro_2.*11*:2.4.0)。失败可能与此有关。


苏。我认为问题更深层次。我得到的实际错误是:

0 投票
1 回答
1229 浏览

scala - 如何在 spark-avro 2.4 模式中设置logicalType?

我们从应用程序中的 avro 文件中读取时间戳信息。我正在测试从 Spark 2.3.1 到 Spark 2.4 的升级,其中包括新内置的 spark-avro 集成。但是,我无法弄清楚如何告诉 avro 模式我希望时间戳具有“timestamp-millis”的逻辑类型,而不是默认的“timestamp-micros”。

仅通过使用 Databricks spark-avro 4.0.0 包查看 Spark 2.3.1 下的测试 avro 文件,我们就有以下字段/模式:

自 epoch 存储为 long 以来,其中的 searchTime 为毫秒。一切都很好。

当我升级到 Spark 2.4 和内置 spark-avro 2.4.0 包时,我有了这些更新的字段/模式:

可以看到,底层类型仍然是 long,但现在增加了“timestamp-micros”的logicalType。这正是发行说明所说的那样,但是,我找不到指定架构以使用“timestamp-millis”选项的方法。

这成为一个问题,当我向 avro 文件写入一个 Timestamp 对象时,该对象被初始化为 10,000 秒后的 epoch,它将被读取为 10,000,000 秒。在 2.3.1/databricks-avro 下,它只是一个 long 没有与之相关的信息,所以它是刚进去就出来的。

我们目前通过反映感兴趣的对象来构建模式,如下所示:

我尝试通过创建一个修改后的模式来扩充这一点,该模式试图替换与 searchTime 条目对应的 StructField,如下所示:

但是,在 spark.sql.types 中定义的 StructField 对象没有可以扩充其中的 dataType 的logicalType 的概念。

我还尝试通过两种方式从 JSON 表示创建模式:

第一次尝试只是从中创建一个 DataType

失败是因为它无法为 searchTime 节点创建 StructType,因为其中包含“logicalType”。第二次尝试是通过传入原始 JSON 字符串来简单地创建模式。

这没有说:

我发现在spark-avro API中有一种方法可以从模式中获取逻辑类型,但无法弄清楚如何设置。

正如您在上面看到的失败尝试,我尝试使用 Schema.Parser 创建 avro 模式对象,但 spark.read.schema 中唯一接受的类型是 String 和 StructType。

如果有人可以提供有关如何更改/指定此逻辑类型的见解,我将非常感激。谢谢

0 投票
0 回答
32 浏览

apache-spark - 从文件中获取对象大小

我有一个从 spark 作业输出的 avro 文件,其中包含一些对象:

有没有办法获得对象的特定大小?

0 投票
2 回答
1910 浏览

java - Spark 2.4.0 Avro Java - 无法解析方法 from_avro

我正在尝试从包含 Avro 消息的 kafka 队列运行火花流。

根据https://spark.apache.org/docs/latest/sql-data-sources-avro.html我应该可以from_avro用来将列值转换为Dataset<Row>.

但是,我无法编译该项目,因为它抱怨from_avro找不到。我可以看到在依赖的 package.class 中声明的方法。

如何在本地 Java 代码中使用该from_avro方法?org.apache.spark.sql.avro

pom.xml:

似乎Java无法从sql.avro.package.class