一、什么是DataSource表
二、DataSource表的优势
三、DataSource表的缺点
四、建DataSource表方法
一、什么是DataSource表
Spark除了兼容Hive表之外,还支持datasource表。Spark针对Datasource表做了多项优化,读写性能较Hive表有非常大的提升。
二、DataSource表的优势
(1)写入文件方面:
DataSource表在文件写入阶段并不会挨个重命名小文件,而是直接将整个临时文件目录重命名为分区名后移动到对应位置,大大减少了rename操作时间,进而减少了任务执行的总时间,在HDFS压力比较大的时候,对任务的执行时间影响非常小。
而Spark在写Hive表时,如果小文件较多,会在rename小文件和分区的阶段耗费大量时间,如下所示:
可以看到IDE中显示的任务执行时间,比Spark UI中各stage实际执行的总时间要长,实际上多出来的长达几分钟的时间,是在将HDFS的临时文件rename到目标目录。
如上图所示,在Spark将数据写入到Hive表的过程中,每个task产生的临时文件都将被写入到临时目录,而每一个临时文件都会被rename到目标HDFS目录下。小文件数量越多,该rename操作所花费的时间就越长。
(2)读取文件方面:
DataSource在读文件的时候会将小文件合并,提升读的效率。
三、DataSource表的缺点
(1)DataSource表无法用多线程写入同一个表的不同分区。
(2)创建Parquet格式表时,如果字段类型为数组,该字段不能有空值,否则读写时会报错。
四、建DataSource表方法
CREATE TABLE database.tablename (
`job_flow_name` string ,
......
`statis_date` string – 必须先定义分区字段
)
using parquet – SparkSQL内置格式都支持,如parquet、ORC等
partitioned by (statis_date); – 这里不需要指定分区字段的类型
-------------------------------------------------------------------------------------------------------------------
根据查询建临时表:
CREATE TABLE tmpbase.tmpname
using parquet as
select t1.xxxx,
t2.xxx,
......
;
下图所示内容摘自右方链接中的《Spark权威指南》:
关注微信公众号【飞哥大数据】,回复666 获取2022年100+公司面试真题,以及spark与flink面试题汇总



