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。
在Spark-1.5中,Spark的内存分为三个部分
这三部分内存是互相独立的,不能互相借用,这给使用者提出了很高的要求。 Spark-1.6中简化了内存配置,执行内存和存储内存可以互相借用,其中
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
```