当前位置:Gxlcms > 数据库问题 > Spark SQL下的Parquet使用最佳实践和代码实战

Spark SQL下的Parquet使用最佳实践和代码实战

时间:2021-07-01 10:21:17 帮助过:15人阅读

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

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 LevelDefinition LevelValue
1 2 132990600
0 1 “spark”
0 0 NULL

Spark SQL下的Parquet使用最佳实践和代码实战

标签:java se   javase   roc   ring   条件   ada   tle   相关   diff   

人气教程排行