为了账号安全,请及时绑定邮箱和手机立即绑定

DataFrame和Parquet

标签:
大数据

Apache Parquet作为文件格式最近获得了显著关注,假设你有一个100列的表,大部分时间你只需要访问3-10列,行存储,不管你需要不需要它们,你必须扫描所有。Apache Parquet是列存储,如果需要3列,那么只有这3列被load。并且datatype、compression和quality非常好。下面我们来介绍如何把一个表存储为Parquet和如何加载。首先建立一个表格:

first_namelast_namegender
BarackObamaM
BillClintonM
HillaryClintonF

Spark SQL:

val hc = new org.apache.spark.sql.hive.HiveContext(sc)import hc.implicits._case class Person(firstName: String, lastName: String, gender: String)val personRDD = sc.textFile("person").map(_.split("\t")).map(p => Person(p(0),p(1),p(2)))val person = personRDD.toDFperson.registerTempTable("person")val males = hc.sql("select * from person where gender='M'")
males.collect.foreach(println)

保存DF为Parquet格式:

person.write.parquet("person.parquet")

Hive中建立Parquet格式的表:

create table person_parquet like person stored as parquet;
insert overwrite table person_parquet select * from person;

加载Parquet文件不再需要case class。

val personDF = hc.read.parquet("person.parquet")personDF.registerAsTempTable("pp")val males = hc.sql("select * from pp where gender='M'")
males.collect.foreach(println)

Sometimes Parquet files pulled from other sources like Impala save String as binary. To fix that issue, add the following line right after creating SqlContext:

sqlContext.setConf("spark.sql.parquet.binaryAsString","true")



作者:jacksu在简书
链接:https://www.jianshu.com/p/9144dcdc2277


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
51
获赞与收藏
181

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

举报

0/150
提交
取消