Apache Avro是Hadoop之父Doug Cutting创建,具有跨语言,序列化后空间小等优点,被广泛应用在大数据领域。Avro模式通常用JSON来写,使用二进制格式编码
我们基于上一节的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")
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
import org.apache.spark.sql.avro.functions._
val AvroDF = spark.read.format("avro").load("/home/ec2-user/file.avro")
AvroDF.show
AvroDF.printSchema