0016-Avro序列化反序列化和Spark读取Avro数据
溫馨提示:要看高清無(wú)碼套圖,請(qǐng)使用手機(jī)打開(kāi)并單擊圖片放大查看。
1.簡(jiǎn)介
本篇文章主要講如何使用java生成Avro格式數(shù)據(jù)以及如何通過(guò)spark將Avro數(shù)據(jù)文件轉(zhuǎn)換成DataSet和DataFrame進(jìn)行操作。
1.1Apache Arvo是什么?
Apache Avro 是一個(gè)數(shù)據(jù)序列化系統(tǒng),Avro提供Java、Python、C、C++、C#等語(yǔ)言API接口,下面我們通過(guò)java的一個(gè)實(shí)例來(lái)說(shuō)明Avro序列化和反序列化數(shù)據(jù)。
- 支持豐富的數(shù)據(jù)結(jié)構(gòu)
- 快速可壓縮的二進(jìn)制數(shù)據(jù)格式
- 存儲(chǔ)持久數(shù)據(jù)的文件容器
- 遠(yuǎn)程過(guò)程調(diào)用(RPC)
- 動(dòng)態(tài)語(yǔ)言的簡(jiǎn)單集成
2.Avro數(shù)據(jù)生成
2.1定義Schema文件
1.下載avro-tools-1.8.1.jar
Avro官網(wǎng):http://avro.apache.org/ Avro版本:1.8.1 下載Avro相關(guān)jar包:avro-tools-1.8.1.jar 該jar包主要用戶(hù)將定義好的schema文件生成對(duì)應(yīng)的java文件
2.定義一個(gè)schema文件,命名為CustomerAdress.avsc
{
"namespace":"com.peach.arvo",
"type": "record",
"name": "CustomerAddress",
"fields": [
{"name":"ca_address_sk","type":"long"},
{"name":"ca_address_id","type":"string"},
{"name":"ca_street_number","type":"string"},
{"name":"ca_street_name","type":"string"},
{"name":"ca_street_type","type":"string"},
{"name":"ca_suite_number","type":"string"},
{"name":"ca_city","type":"string"},
{"name":"ca_county","type":"string"},
{"name":"ca_state","type":"string"},
{"name":"ca_zip","type":"string"},
{"name":"ca_country","type":"string"},
{"name":"ca_gmt_offset","type":"double"},
{"name":"ca_location_type","type":"string"}
]
}
Schema說(shuō)明:
- namespace:在生成java文件時(shí)import包路徑
- type:omplex types(record, enum,array, map, union, and fixed)
- name:生成java文件時(shí)的類(lèi)名
- fileds:schema中定義的字段及類(lèi)型
3.生成java代碼文件
使用第1步下載的avro-tools-1.8.1.jar包,生成java code
java -jar avro-tools-1.8.1.jar compile schema CustomerAddress.avsc .
末尾的"."代表java code 生成在當(dāng)前目錄,命令執(zhí)行成功后顯示:
2.2使用Java生成Avro文件
1.使用Maven創(chuàng)建java工程
在pom.xml文件中添加如下依賴(lài)
org.apache.avro
avro
1.8.1
2.新建java類(lèi)GenerateDataApp,代碼如下
動(dòng)態(tài)生成avro文件,通過(guò)將數(shù)據(jù)封裝為GenericRecord對(duì)象,動(dòng)態(tài)的寫(xiě)入avro文件,以下代碼片段:
3. Spark讀Avro文件
1.使用Maven創(chuàng)建一個(gè)scala工程
在pom.xml文件中增加如下依賴(lài)
2.Scala事例代碼片段
3.Spark運(yùn)行結(jié)果
源碼地址:
https://github.com/javaxsky/avrotospark
醉酒鞭名馬,少年多浮夸! 嶺南浣溪沙,嘔吐酒肆下!摯友不肯放,數(shù)據(jù)玩的花!
溫馨提示:要看高清無(wú)碼套圖,請(qǐng)使用手機(jī)打開(kāi)并單擊圖片放大查看。
總結(jié)
以上是生活随笔為你收集整理的0016-Avro序列化反序列化和Spark读取Avro数据的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 第一冲刺阶段第三天
- 下一篇: 浅谈分布式CAP定理