快速理解Parquet的DL和RL
关于Parquet的详细介绍,请参考: 新一代列式存储格式Parquet,此文中对Parquet做了详细的介绍,这里不做重复介绍,但其中关于Definition Level(DL)和Repeated Level(RL)部分,比较难懂,这里做一个更加方便易懂的总结。
对DL和RL的理解,最好是文中的关于Document对象的示例,摘录如下:
一个完整的例子
本节我们使用Dremel论文中给的Document示例和给定的两个值r1和r2展示计算repeated level和definition level的过程,这里把未定义的值记录为NULL,使用R表示repeated level,D表示definition level。
这个示例及讲解已经够明白了,但对于思维不那么发达的童鞋来说,理解起来还是颇有困难的,比如说我!
首先阐明我对DL和RL的理解:
DL,Definition Level,顾名思义,即在对象树中,对与相应schema来讲,当前节点的定义深度(到节点本身),即在第几深度被定义的,如果该节点有值,那么对应的DL值就是从根节点到该节点本身的深度,如果值为NULL,则其值应该为从根节点到该节点路径的最大深度
RL, Repeated Level,顾名思义,即在对象树中,对与相应schema来讲,当前节点的“重复深度”,何谓“重复深度”,这正是通篇中最不易理解的地方。我给出自己的定义:所谓重复深度是指repeated类型节点(处于Array或List集合中的节点)记为“certainType A”相对于上一个相同schema类型节点(记为“certainType B”)而言,两者最大能在哪个Level上repeat,更通俗地讲就是指两者的“共同的相互repeated的祖先的深度”,唉,实际上还是有点绕!
举个栗子来说,如上述示例中的值为en_us的Code节点A,和值为en的Code节点B以及值为en-gb的Code节点C, 因为A在r1中首次出现,且被定义在第3深度,所以对应的RL=0,DL=3, 而B节点相对于上一相相同schema类型的节点A来说,两者只能在Language深度上被Language做repeated,而不能在Language内部作为兄弟节点进行repeate,因为而者父亲不同,所以对于B来讲,其RL值就是祖先中Language节点的深度,DL值就是B本身的深度,因为RL=2,DL=3,但是,注意到,因为schema中规定Code节点是required类型,即必填值,因此对这种类型的节点而言,其值一定被定义了,所以可以忽略DL的值,同时该列中RL最大值只到2,所以DL也取了2,其实我理解这时候DL取几都无所谓。因为DL只对repeated和optional型节点有意义。同理C节点和A、B节点最多只能在Name节点的深度上repeate,而C是在第3深度定义的,因此,RL=1,DL=3,同上述解释,DL取最大的RL,即2。
最后
对于DL,用一句话理解:这个非requied节点在第几深度被定义,DL就是几
对于RL,用一句话理解:这个repeted节点与前一个同型节点在第几深度做repeate,RL就是几
快速理解Parquet的DL和RL的更多相关文章
- 【转】快速理解Kafka分布式消息队列框架
from:http://blog.csdn.net/colorant/article/details/12081909 快速理解Kafka分布式消息队列框架 标签: kafkamessage que ...
- Spark机器学习 Day2 快速理解机器学习
Spark机器学习 Day2 快速理解机器学习 有两个问题: 机器学习到底是什么. 大数据机器学习到底是什么. 机器学习到底是什么 人正常思维的过程是根据历史经验得出一定的规律,然后在当前情况下根据这 ...
- 快速理解web语义化
什么是Web语义化 Web语义化是指使用恰当语义的html标签.class类名等内容,让页面具有良好的结构与含义,从而让人和机器都能快速理解网页内容.语义化的web页面一方面可以让机器在更少的人类干预 ...
- 快速理解高性能HTTP服务端的负载均衡技术原理(转)
1.前言 在一个典型的高并发.大用户量的Web互联网系统的架构设计中,对HTTP集群的负载均衡设计是作为高性能系统优化环节中必不可少的方案.HTTP负载均衡的本质上是将Web用户流量进行均衡减压,因此 ...
- 脑残式网络编程入门(四):快速理解HTTP/2的服务器推送(Server Push)
本文原作者阮一峰,作者博客:ruanyifeng.com. 1.前言 新一代HTTP/2 协议的主要目的是为了提高网页性能(有关HTTP/2的介绍,请见<从HTTP/0.9到HTTP/2:一文读 ...
- 字符编码那点事:快速理解ASCII、Unicode、GBK和UTF-8
原作者:阮一峰(ruanyifeng.com),现重新整理发布,感谢原作者的无私分享. 1.引言 今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料. 这个问题比我想象 ...
- [转帖]十分钟快速理解DPI和PPI,不再傻傻分不清!
十分钟快速理解DPI和PPI,不再傻傻分不清! https://baijiahao.baidu.com/s?id=1605834796518990333&wfr=spider&for= ...
- 快速理解VirtualBox的四种网络连接方式
VirtualBox中有4中网络连接方式: NAT Bridged Adapter Internal Host-only Adapter VMWare中有三种,其实他跟VMWare 的网络连接方式都是 ...
- 深入浅出 1 - AI量化策略快速理解
我们在用AI来编写量化策略过程中,主要用到了机器学习,先来从一张图直观理解什么是机器学习:人类对新问题做出有效决策依靠的是过去积累的许多经验,并对经验进行利用,而对机器来说,“经验”以“数据”方式 ...
随机推荐
- windows2008 配置安装FTP服务器
windows2008 配置安装FTP服务器 今天在服务器上开了IIS7,但是要求把一个附件文件夹拷贝到根目录下面,这个附件文件夹有2G多大小,直接用远程桌面映射,一直都拷贝不成功,而且本地缓存越来越 ...
- openGL剪裁区
/** * 缓冲区工具类 */public class BufferUtil { /** * 将浮点数组转换成字节缓冲区 */ public static ByteBuffer arr2ByteB ...
- 封装ReaderWriterLockSlim
封装ReaderWriterLockSlim ReaderWriterLockSlim 类 表示用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问. 使用 ReaderWriterLoc ...
- POJ 3667 & 1823 Hotel (线段树区间合并)
两个题目都是用同一个模板,询问最长的连续未覆盖的区间 . lazy代表是否有人,msum代表区间内最大的连续长度,lsum是从左结点往右的连续长度,rsum是从右结点往左的连续长度. 区间合并很恶心啊 ...
- JS二维数据处理逻辑封装探究
一.目的 定义出一个专门用于处理二维数据的组件,所谓二维数据就是能用二维表格显示出来的数据,所谓处理就是增删改查,很简单. 二.约束 外部程序给该组件传入如下形式的对象,让该组件自行解析. var t ...
- java并发之固定对象与实例
java并发之固定对象与实例 Immutable Objects An object is considered immutable if its state cannot change after ...
- 工具条OutLookBar
工具条OutLookBar 灰姑娘本身也有自已的优点,但是却可能因为外貌不讨人喜欢,要变成白雪公主却需要有很多勇气和决心去改变自已: 有一颗善良的心 讨人喜爱的外貌 我这里讲的是一个工具条的蜕变过程, ...
- mybatis逆向工程生成代码
1 什么是逆向工程 mybaits需要程序员自己编写sql语句,mybatis官方提供逆向工程 可以针对单表自动生成mybatis执行所需要的代码(mapper.java,mapper.xml.po. ...
- 超级强悍的PHP代码编辑器PHPstorm及配置
如何下载安装 官方网站:http://www.jetbrains.com/phpstorm/,本篇文章展示的是5.0版本以,所以,如果你的软件版本过高,可能可有误,所以,如果有问题,请在本站留言,做为 ...
- Web API 的安全性
Web API 的安全性 ASP.NET Web API 可非常方便地创建基于 HTTP 的 Services,这些服务可以非常方便地被几乎任何形式的平台和客户端(如浏览器.Windows客户端.An ...