时间:2021-07-01 10:21:17 帮助过:15人阅读
required(出现1次),optional(出现0次或者1次),repeated(出现0次或者多次)
这个schema中每条记录表示一个人的AddressBook。有且只有一个owner,owner可以有0个或者多个ownerPhoneNumbers,owner可以有0个或者多个contacts。每个contact有且只有一个name,这个contact的phoneNumber可有可无。
第一点:就存储数据本身而言,只考虑叶子节点,我们的叶子节点owner、ownerPhoneNumber、name、phoneNumber;
第二点:在逻辑上而言Schema实质上是一个Table:
AddressBook | |||
---|---|---|---|
owner | ownerphonenumber | contacts | |
name | phonenumber | ||
第三点:对于一个Parquet文件而言,数据会被分成Row Group(里面包含很多Column,每个Column具有几个非常重要的特性例如Repetition Level、Definition Level);
第四点:Column在Parquet中是以Page的方式存在的,Page中有Repetition Level、Definition Level等内容;
第五点:Row Group在Parquet中是数据读写的缓存单元,所以对Row Group的设置会极大的影响Parquet的使用速度和效率,所以如果是分析日志的话,我们一般建议把Row Group的缓存大小配置成大约256MB,很多人的配置都是大约1G,如果想最大化的运行效率强烈建议HDFS的Block大小和Row Group一致;
第六点:在实际存储的把一个树状结构,通过巧妙的编码算法,转换成二维表结构
Repetition Level | Definition Level | Value |
---|---|---|
1 | 2 | 132990600 |
0 | 1 | “spark” |
0 | 0 | NULL |
Spark SQL下的Parquet使用最佳实践和代码实战
标签:java se javase roc ring 条件 ada tle 相关 diff