Spark 2.0更新要点
1. 支持 sql 2003,支持子查询
2. DataFrame是DataSet中的一种特例,val dataFrame = DataSet[Row]
SQL是没类型的,DataFrame是弱类型的,DataSet是强类型的,
所以如果使用DataSet的话在2.0是不可以用python来写代码的!
3. 第二代钨丝计划:添加了whole stage code generation. 可以使CPU更加有效地利用。
4. Structured Streaming是Spark 2.x功能上最让人兴奋的变化。(以后补充)
认识1
大数据公司中90%左右都是在基于Hive做SQL多维度数据分析,现在的主要的潮流是Spark SQL+Hive;
剩下10%做流处理和机器学习,图计算少之又少,国内主要是腾讯和阿里;
认识2
从Spark 2.0开始,Spark本身成为了编译器.这可以从whole stage code generation看出来。
CPU浪费时间的地方主要有两处:
第一:Virtual function call的调用;
虚方法的调用,操作硬件从汇编到C到JAVA等不断抽象,也就不断含蓄,这也就使得一条指令多出了一些无用的曲折。
code generation可以对其进行优化,从而使CPU更有效率。
第二:CPU要基于内存读写数据也会花费大量的时间消耗;
在RDD中计算是通过iterator的hasNext,next方法来不断计算的,如果有一万条,那方法至少要调用2万次。
这就不如直接使用for循环,Loop Unrolling, SIMD有效率。
code generation可以通过更有效的方式将数据放到寄存器中,从而使CPU更有效。