zoukankan      html  css  js  c++  java
  • Spark1.6 DataSets简介

        Apache Spark提供了强大的API,以便使开发者为使用复杂的分析成为了可能。通过引入SparkSQL,让开发者可以使用这些高级API接口来从事结构化数据的工作(例如数据库表,JSON文件),并提供面向对象使用RDD的API,开发只需要调用相关 的方法便可使用spark来进行数据的存储与计算。那么Spark1.6带给我们了些什么牛逼的东西呢? 额。。。

        Spark1.6提供了关于DateSets的API,这将是Spark在以后的版本中的一个发展趋势,就如同DateFrame,DateSets提供了一个有利于Spark Catalyst optimizer 以及数据字段查询的分析优化,并支持更加快速的内存编码。并且数据集扩展了编译时的类型安全检查机制,可以更好地在程序运行前就检查错误。 

      DataSets是一个强类型的、不可变的对象集合,DataSets的API核心是一个新的编码器,改编码器的作用是将JVM的对象与表结构进行转换。使其可以操作序列化的数据及提高了内存的利用率。同时,用户在使用时,发现与一般的RDD的API极其相似,提供了很多相同的功能转换。如下代码,进行文本中单词的拆分。

    RDDs:

    val lines = sc.textFile("/wikipedia")
    val words = lines
      .flatMap(_.split(" "))
      .filter(_ != "")

    DataSets:

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

    同时DataSets也支持聚合操作,比如计算每个单词的出现次数:

    RDDs:

    val counts = words
        .groupBy(_.toLowerCase)
        .map(w => (w._1, w._2.size))

    DataSets:

    val counts = words 
        .groupBy(_.toLowerCase)
        .count()

    通过执行发现DataSets的执行速度要比原生的RDD快很多。同时,如果使用RDD需要开发人员自己去优化并行算法,或者书写方式来达到DataSets的效果。

    同时,DataSets API的另一个优势在于减少内存的使用量。Spark能够解析在DataSets中结构化的数据,并在内存中优化结构,将DataSets中的数据缓存起来。同比原生的RDD,要节省相当多的内存空间。

  • 相关阅读:
    转载:C#制作PDF
    搜索研究
    HDU 4029 Distinct Submatrix [后缀数组]
    HDU 4336 Card Collector [状态压缩概率DP]
    ZOJ 3329 One Person Game [数学期望]
    POJ 2096 Collecting Bugs[数学期望]
    HDU 4338 Simple Path [双联通分量+RMQ(LCA)]
    POJ 1222 EXTENDED LIGHTS OUT [高斯消元]
    HDU 2258 Continuous Same Game (1)[模拟]
    HDU 4339 Query [树状数组]
  • 原文地址:https://www.cnblogs.com/yangsy0915/p/5122658.html
Copyright © 2011-2022 走看看