Spark 1.6的几大亮点

Dataset API

RDD API可以进行类型检查,但是不能使用Catalyst进行优化;

DataFrame API可以使用Catalyst进行优化,但是不能进行类型检查;

Dataset API介于两者之间,即可以进行类型检查又可以使用Catalyst进行优化。

case class Data(a: Int, b: String)
val ds = Seq(
  Data(1, "one"),
  Data(2, "two")).toDS()

ds.collect()

DataFrame API类似于Twitter Scalding的Fields based API;

Dataset API类似于Twitter Scalding的Type safe API

Automatic memory configuration

在Spark-1.5中,Spark的内存分为三个部分

  1. 执行内存 spark.shuffle.memoryFraction (default=0.2)
  2. 存储内存 spark.storage.memoryFraction (default=0.6)
  3. 其他内存 (default=0.2)

这三部分内存是互相独立的,不能互相借用,这给使用者提出了很高的要求。 Spark-1.6中简化了内存配置,执行内存和存储内存可以互相借用,其中

  1. spark.memory.fraction (default=0.75) 这部分内存用于执行和存储
  2. spark.memory.storageFraction (default=0.5) 这部分内存是存储内存的最大值

Optimized state storage in Spark Streaming

1. 没有delete key机制,随着数据增多,每个Batch的处理时间会增大
2. 没有Timeout机制

```trackStateByKey```试图解决这些问题,增加了delete key以及Timeout机制,用户可以更加灵活的使用有状态的Streaming。

# Pipeline persistence in Spark ML
- [SPARK-6725](https://issues.apache.org/jira/browse/SPARK-6725)
- [Design Doc](https://docs.google.com/document/d/1RleM4QiKwdfZZHf0_G6FBNaF7_koc1Ui7qfMT1pf4IA/edit)

Spark ML之前只能保存Module,1.6中新增可以保存Pipline,可用于
1. 重新运行workflow
2. 导出到外部的系统


# SQL Queries on Files
- [SPARK-11197](https://issues.apache.org/jira/browse/SPARK-11197)

从Apache Drill借鉴过来的API,不需要把文件注册成Table再进行SQL查询,支持直接在文件上做查询。

Seq((“Michael”, “Databricks”)) .toDF(“name”, “company”) .write .mode(“overwrite”) .save(“/home/spark/1.6/people”)

%sql SELECT * FROM parquet./home/spark/1.6/people ```

Reference

Written on March 8, 2018