2.1 Spark 2.2综述
Spark 2.0中更新发布了新的流处理框架(Structured Streaming);对于API的更新,Spark 2.0版本API的更新主要包括DataFrame、DataSet、SparkSession、累加器API、Aggregator API等API的变动。
2.1.1 连续应用程序
自从Spark得到广泛使用以来,其流处理框架Spark Streaming也逐渐吸引到了很多用户,得益于其易用的高级API和一次性语义,使其成为使用最广泛的流处理框架之一。但是,我们不仅需要流处理来构建实时应用程序,很多时候我们的应用程序只有一部分需要用到流处理,对于这种应用程序,Databricks公司把它称为Continuous Application(实时响应数据的端到端的应用程序),也就是连续的应用程序。在Continuous Application中有许多难点,如数据交互的完整性、流数据与离线数据的结合使用、在线机器学习等。
Spark 2.0最重磅的更新是新的流处理框架——Structured Streaming。它允许用户使用DataFrame/DataSetAPI编写与离线批处理几乎相同的代码,便可以作用到流数据和静态数据上,引擎会自动增量化流数据计算,同时保证了数据处理的一致性,并且提供了和存储系统的事务集成。
2.1.2 新的API
在Spark 2.0版本的API中,共有如下几个API的变动:
(1)统一了DataFrame和DataSet。现在DataFrame不再是一个独立的类,而是作为DataSet[Row]的别名定义在org.apache.spark.sql这个包对象中。
sql\package.scala源码如下:
1. package object sql { 2. 3. /** * 将一个逻辑计划转换为零个或多个SparkPlans。这个API是查询计划实验使用,不是为 * Spark 稳定发行版设计的。编写库的开发者应该考虑使用[[org.apache.spark.sql. * sources]]提供的稳定APIs 4. */ 5. @DeveloperApi 6. @InterfaceStability.Unstable 7. type Strategy = SparkStrategy 8. 9. type DataFrame = Dataset[Row] 10. }
(2)加入了SparkSession,用于替换DataFrame和Dataset API的SQLContext和HiveContext(这两个API仍然可以使用)。
(3)为SparkSession和SparkSQL加入一个新的,精简的配置参数——RuntimeConfig,用来设置和获得与SparkSQL有关的Spark或者Hadoop设置。
SparkSession.scala源码:
1. /** 2. * Spark运行时的配置接口 * 3. * 这是用户可以获取并设置所有Spark和Hadoop的接口。将触发 Spark SQL相关的配 * 置。当获取配置值时,默认设置值在SparkContext里 4. * @since 2.0.0 5. */ 6. @transient lazy val conf: RuntimeConfig = new RuntimeConfig (sessionState.conf)
(4)更简单、更高性能的累加器API。
(5)用于DataSet中类型化聚合的新的改进的Aggregator API。