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,要节省相当多的内存空间。

最新文章

  1. Android开发案例 - 淘宝商品详情
  2. [LeetCode] Game of Life 生命游戏
  3. ASP.NET MVC 插件化机制
  4. VS2012 配置 OpenCV3.0
  5. C中signed与unsigned
  6. HDU 3688 Searchlights(并查集)
  7. 自己动手写CPU之第九阶段(8)——MIPS32中的LL、SC指令说明
  8. 关于python使用list出现乱码的解决
  9. dll和lib(包括静态链接库和与dll同时生成的lib)
  10. Apache 80端口被占用
  11. 使用Spring MVC实现数据绑定
  12. 失物找寻APP软件需求规格说明书——第三次团队作业
  13. IO和NIO
  14. Nuke的色彩匹配节点思路
  15. JAVA简单内存泄露分析及解决
  16. 彻底解决java WEB项目的文件路径问题(war包)
  17. object references an unsaved transient instance - save the transient instance before flushing: com.jspxcms.core.domain.ScTeam
  18. ASP .NET core 入门基础内容备份
  19. 洛谷——P1866 编号
  20. CardView的具体使用方法(转)

热门文章

  1. 故障模块名称: mso.dll
  2. zf2 中 new Express 的用法
  3. zoj3261 带权并查集
  4. 让图片完全显示出来,应对overflow,以及在背景中完全显示出来
  5. Linux实时监控工具Nmon使用
  6. Don’t Assume – Per Session Buffers
  7. 重新加载maven项目的依赖项
  8. python3_RoboBrowser_test
  9. linux 下 nginx 启动服务器 80端口被占用问题
  10. SQL Server 2005 分区表创建实例