问题标签 [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.
scala - 如何将十进制逻辑类型读入火花数据帧
我有一个包含十进制逻辑类型的 Avro 文件,如下所示:
当我尝试使用 scala spark 库读取文件时,df 模式是
如何将其转换为十进制类型?
apache-spark - 零件文件的大小对 Spark SQL 性能有影响吗
我正在尝试查询具有很多部分文件(avro)的 hdfs。最近我们进行了更改以减少并行度,因此零件文件的大小增加了,每个零件文件的大小在 750MB 到 2 GB 的范围内(我们使用 Spark Streaming 以 10 分钟的间隔将日期写入 hdfs,所以这些文件的大小取决于我们从上游处理的数据量)。部分文件的数量约为 500。我想知道这些部分文件的大小/部分文件的数量是否会对 spark SQL 性能起任何作用?
如果需要,我可以提供更多信息。
scala - Spark 通过自动分区发现读取多个路径
我正在尝试从多个路径将一些 avro 文件读取到 DataFrame 中。假设我的路径是"s3a://bucket_name/path/to/file/year=18/month=11/day=01"
在这条路径下我还有两个分区让我们说country=XX/region=XX
我想一次读取多个日期而不明确命名国家和地区分区。此外,我希望国家和地区成为此 DataFrame 中的列。
这条线运行良好,因为我只阅读了一条路径。它检测国家和地区分区并推断其架构。
当我尝试阅读多个日期时,让我们说
我收到此错误:
显然我不能使用 basePath 因为路径不共享一个。我还尝试在每条路径的末尾使用 /*,这确实有效,但完全忽略了国家和地区分区。
我可以一一阅读路径并将其合并,但我觉得我错过了一些东西。
知道为什么它仅适用于单个路径以及如何使其适用于多个路径吗?
apache-spark-sql - 将 StructType 转换为 Avro Schema,使用 databricks spark-avro 时返回类型为 Union
我正在使用 databricks spark-avro 将数据帧模式转换为 avro 模式。返回的 avro 模式没有默认值。当我尝试从架构中创建通用记录时,这会导致问题。任何人都可以帮助正确使用此功能吗?
这是 df 模式:
这是 avro 转换后的架构:
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 显示不同的行。
我做错了还是有错误?
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"
列在我的依赖项中,它在我的外部库中。我还缺少另一个依赖项吗?
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
)。失败可能与此有关。
苏。我认为问题更深层次。我得到的实际错误是:
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。
如果有人可以提供有关如何更改/指定此逻辑类型的见解,我将非常感激。谢谢
apache-spark - 从文件中获取对象大小
我有一个从 spark 作业输出的 avro 文件,其中包含一些对象:
有没有办法获得对象的特定大小?
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