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