作者回复: 好问题~ Dataset咱们一直没讲,先说结论。在执行效率上,Dataset与DataFrame是一样的、一致的,没有区别。他们都能共享Spark SQL提供的性能红利,所以说,从性能的角度,不用担心。包括你提到的Dataset<Row>和Dataset<具体类型>之间,性能上也没有差异。 差异主要在开发效率上,对于Dataset<具体类型>,开发者需要定义明确的case class,从而让Spark SQL知道每个字段的具体类型。这其实就涉及到一个开发效率的问题,为什么这么说呢? 当应用中的数据集较多的时候,或者说当你需要创建多个Dataset的时候,你都需要定义相应的case class。其实,定义case class还是或多或少有点麻烦的。当然,不同开发者偏好不同,也有喜欢用Dataset开发的。不过,通常来说,DataFrame会来的更直接,简单、易用,所以通常来说DataFrame用的比较多~
作者回复: 这个不是可选的哈,在Spark SQL框架下,每个执行阶段的代码,Tungsten都会尝试用whole stage code gen捏合到一起,生成一份代码。然后把捏合之后的代码,丢给Spark Core去执行
作者回复: 确实有把Tungsten归类到Spark Core的范畴的,其实我觉得都OK,是归类到Spark Core还是Spark SQL,其实这个倒没那么重要,重要的是,大家理解、吃透Tungsten的各种优化机制就好了哈~