跳转到主要内容
工程的博客

Apache Avro作为一个内置的数据源在Apache 2.4火花

分享这篇文章

在砖试试这个笔记本

Apache Avro是一种流行的数据序列化格式。广泛用于Apache火花和Apache Hadoop生态系统,特别是对于Kafka-based数据管道。从Apache 2.4火花释放,引发阅读和写作Avro数据提供了内置的支持。新的内置spark-avro模块是最初从砖的开源项目bob下载地址Avro数据源为Apache火花(称为spark-avro从现在开始)。另外,它还提供了:

  • 新功能from_avro ()to_avro ()读写DataFrame Avro数据而不是文件。
  • Avro逻辑类型支持,包括小数,日期和时间戳,类型。有关详细信息,请参阅相关的模式转换。
  • 2 x读提高吞吐量和10%写提高吞吐量。

在这个博客中,我们检查每个上述特性的例子,给你一个味道的简单API使用,性能改进和优点。

加载和保存功能

在Apache 2.4火花,Avro加载/保存数据格式,您可以简单地指定文件格式为“Avro”DataFrameReader DataFrameWriter。的一致性和熟悉,使用类似于其他数据源。

val usersDF = spark.read。格式(“avro”).load (“例子/ src / main /资源/ users.avro”)usersDF.select (“名称”,“favorite_color”).write。格式(“avro”).save (“namesAndFavColors.avro”)

的力量from_avro()和to_avro ()

为了进一步简化数据转换管道,我们引入了两个新的内置函数:from_avro ()to_avro ()。Avro通常用于序列化/反序列化消息/ Apache Kafka-based数据管道中的数据。使用Avro记录作为列读取或写入卡夫卡时是有用的。每个卡夫卡键-值记录增强一些元数据,如摄入时间戳到卡夫卡,卡夫卡的抵消,等等。

有三个实例,这些功能是有用的:

  • 当火花从卡夫卡读取Avro二进制数据,from_avro ()可以提取数据、清洁它,改变它。
  • 当你想要改变你的结构成Avro二进制记录,然后把他们下游再次卡夫卡或写一个文件,使用to_avro ()
  • 当你想要将多个列成一个编码,使用to_avro ()。

两个函数只有在Scala和Java。

< br / >进口org.apache.spark.sql.avro._/ /“from_avro”需要Avro JSON字符串格式的模式。val jsonFormatSchema =字符串(Files.readAllBytes (Paths.get (”。/例子/ src / main /资源/ user.avsc”)))
              val df =火花.readStream.format (“卡夫卡”).option (“kafka.bootstrap.servers”,“host1:端口1,host2:端口2”).option (“订阅”,“人类”).load ()/ / 1。解码Avro数据结构;/ / 2。过滤列“favorite_color”;/ / 3。在Avro格式编码列的名字”。val输出= df.select (from_avro (“价值,jsonFormatSchema)”用户)其中(“用户。favorite_color = = \“红色\ ").select (to_avro(美元)“user.name”)作为“价值)val查询=输出.writeStream.format(“卡夫卡”).option (“kafka.bootstrap。服务器”、“host1:端口1,host2:端口2”).option(“主题”、“话题二”).start ()

更多的例子,请参阅读和写流与DataFrames Avro数据

兼容数据砖spark-avro

内置的spark-avro模块兼容砖的开源库bob下载地址spark-avro

读/写数据使用以前创建的源表com.databricks.spark.avro,您可以加载/写这些相同的表使用这个内置Avro模块,没有任何代码更改。事实上,如果你喜欢使用自己的构建spark-avro jar文件,您可以禁用该配置spark.sql.legacy.replaceDatabricksSparkAvro.enabled,使用的选项——罐子当部署您的应用程序。读了先进的依赖管理部分的应用程序提交指南为更多的细节。

性能改进

IO优化火星- 24800,内置Avro数据源实现性能改进读写Avro文件。我们进行了一些基准测试和观察2 x的性能在读取,而8%的改善写道。

配置和方法论

我们跑的基准在单个节点上Apache火花集群砖社区版。详细的实施的基准,检查Avro基准笔记本

如图表所示,读取性能几乎2倍,写性能也提高8%。

配置信息:

  • 数据:1 m-row DataFrame列的各种类型:Int /双/字符串/地图/数组/结构体,等等。
  • 集群- 6.0 GB的内存,0.88内核,1
  • 砖的运行时版本的:5.0(使用新的内置spark-avro)和4.0(与外部数据砖spark-avro库)

结论

新的内置spark-avro模块提供了更好的用户体验和IO性能在SQL和火花结构化流。原spark-avro将弃用的新的内置支持Avro火花本身。

你可以试试的Apache 2.4火花释放与这个包砖5.0运行时今天。了解更BOB低频彩多关于如何使用Apache Avro结构化流在云中,阅读我们的文档Azure砖AWS

免费试着砖
看到所有工程的博客的帖子