Spark的Datasets

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2016/02/13/spark-datasets/

对于Spark的使用者来说,越简单易用的API越好。所以在原有的RDD之上,Spark陆续添加了DataFrames和Spark SQL。特别是DataFrames,对于小数据集的快速上手非常简单,其API也是从R中借鉴的,很有亲切感。当然在这之下,底层的实现还是RDD,只是对于使用者,抽象程度更高而已。

DataSets是为了解决类型安全和面向对象思维而添加的新API,包含在Spark 1.6中,其也是下个版本集中的方向。

DataSets并不是从关系型数据结构抽象出来的,所以它的API反而和RDD类似,比如

val lines = sqlContext.read.text("/wikipedia").as[String]
val words = lines
  .flatMap(_.split(" "))
  .filter(_ != "")
val counts = words 
    .groupBy(_.toLowerCase)
    .count()

在直接使用的效率和资源消耗上要好一些(图来自DataBricks)

Memory-Usage-when-Caching-Chart-1024x359Distributed-Wordcount-Chart-1024x371

当然,另外一个增强面向对象的特性使用很简单, 主要基于Encoders

public class Person implements Serializable {
    private String name;

    get/set function{}
}

Dataset<Person> schools = context.read().json("/persons.json").as(Encoders.bean(Person.class));

参考资料

https://issues.apache.org/jira/browse/SPARK-9999

http://spark.apache.org/docs/latest/programming-guide.html

https://databricks.com/blog/2016/01/04/introducing-spark-datasets.html

本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

转载自夜明的孤行灯

本文链接地址: https://www.huangyunkun.com/2016/02/13/spark-datasets/

发表评论