Parquet存储格式
1. 什么是Parquet数据格式?
Parquet是一种列式存储格式,可以被多种查询引擎支持(Hive、Impala、Drill等),并且它是语言和平台无关的。
2. Parquet文件下载后是否可以直接读取和修改呢?
Parquet文件是以二进制方式存储的,是不可以直接读取和修改的。Parquet文件是自解析的,文件中包括该文件的数据和元数据。
3. 列式存储和行式存储相比有哪些优势呢?
可以只读取需要的数据,降低IO数据量;
压缩编码可以降低磁盘存储空间。由于同一列的数据类型是一样的,可以使用更高效的压缩编码进一步节约存储空间。
参考链接:
http://blog.csdn.net/yu616568/article/details/51868447 讲解了parquet文件格式和orc文件格式
http://www.infoq.com/cn/articles/in-depth-analysis-of-parquet-column-storage-format 讲解了parquet列式存储
4. 导入parquet文件信息
首先需要有parquet文件,可以在github上下载,链接如下
https://github.com/apache/spark/blob/master/examples/src/main/resources/users.parquet。
parquet文件下载好以后,使用命令pyspark --total-executor-cores 4
打开spark的python环境,然后导入parquet文件。
如果parquet文件存在本地/opt
目录下,导入代码为:
parquetFile = spark.read.parquet("file:///opt/users.parquet")
如果parquet文件存在hdfs上,导入代码如下,其中master是hdfs集群上主机的ip,port指其端口号
parquetFile = spark.read.parquet("hdfs://master:port/user/mart_cis/zhousishuo/users.parquet")
5 读取parquet信息
创建视图
parquetFile.createOrReplaceTempView("parquetFile")
使用spark sql语句查询
users = spark.sql("select * from parquetFile")
users.show()
结果如下:
JSON存储格式
json数据格式一般比较熟悉,如下图:
1. 导入json数据
如果json数据存在本地/opt
目录下,导入代码如下:
session = spark.read.json("file:///opt/people.json")
如果json数据存在hdfs上,导入代码如下:
session = spark.read.json("hdfs://master:8020/user/mart_cis/zhousishuo/people.json")
2.读取json数据
为上述session这个DataFrame注册一张表
session.registerTempTable("session")
使用spark sql语句查询
sessionDF = spark.sql("select * from session")
sessionDF.show()
结果如下:
参考链接:
http://spark.apache.org/docs/latest/sql-programming-guide.html#json-datasets 关于spark sql导入数据讲的比较详细