跳轉到主要內容
工程的博客

Apache Avro作為一個內置的數據源在Apache 2.4火花

分享這篇文章

在磚試試這個筆記本

Apache Avro是一種流行的數據序列化格式。廣泛用於Apache火花和Apache Hadoop生態係統,特別是對於Kafka-based數據管道。從Apache 2.4火花釋放,引發閱讀和寫作Avro數據提供了內置的支持。新的內置spark-avro模塊是最初從磚的開源項目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模塊兼容磚的開源庫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運行時今天。了解更多關於如何使用Apache Avro結構化流在雲中,閱讀我們的文檔Azure磚AWS

免費試著磚
看到所有工程的博客的帖子
Baidu
map