读写AVRO数据

Apache Avro是Hadoop之父Doug Cutting创建,具有跨语言,序列化后空间小等优点,被广泛应用在大数据领域。Avro模式通常用JSON来写,使用二进制格式编码

保存AVRO文件

我们基于上一节的file.json文件,将其转换成avro文件:

./spark-shell --packages org.apache.spark:spark-avro_2.12:3.5.1 


val jsDF = spark.read.json("/home/ec2-user/file.json")

jsDF.write.format("avro").save("/home/ec2-user/file.avro")

image-20240303231907401

Spark将结果写入到了文件夹:

[ec2-user@ip-172-31-45-168 ~]$ ls
file.avro  multi-line.json  spark-3.5.0-bin-hadoop3
file.json  parquet_file     spark-3.5.0-bin-hadoop3.tgz
[ec2-user@ip-172-31-45-168 ~]$ cd file.avro/
[ec2-user@ip-172-31-45-168 file.avro]$ ls -la
total 28
drwxr-xr-x. 2 ec2-user ec2-user   178 Mar  3 15:18 .
drwx------. 7 ec2-user ec2-user 16384 Mar  4 01:19 ..
-rw-r--r--. 1 ec2-user ec2-user     8 Mar  3 15:18 ._SUCCESS.crc
-rw-r--r--. 1 ec2-user ec2-user    16 Mar  3 15:18 .part-00000-d8986948-a3d0-4dde-9ea7-dfd8f990defe-c000.avro.crc
-rw-r--r--. 1 ec2-user ec2-user     0 Mar  3 15:18 _SUCCESS
-rw-r--r--. 1 ec2-user ec2-user   898 Mar  3 15:18 part-00000-d8986948-a3d0-4dde-9ea7-dfd8f990defe-c000.avro

读取AVRO文件

import org.apache.spark.sql.avro.functions._

val AvroDF = spark.read.format("avro").load("/home/ec2-user/file.avro")

AvroDF.show
AvroDF.printSchema

image-20240303232303651