本篇文章为大家展示了spark2.0新特性的示例分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
使用:
离线计算:数据源大多来自hdfs(hive),所以sql使用的非常多,几乎每个离线计算作业都会用到hivecontext或sqlcontext
实时计算:streaming模块
图计算在企业里用的很少,需求少
数据挖掘包mllib的使用比图计算略多,但里面的算法不是很好用,目前需求少
新特性:
1,用sparksession实现hivecontext和sqlcontext统一
2,whole-stage code generation,大幅提高计算性能,因为把物理计划变成硬编码,每秒处理的sql中的数据量增加十倍,即对物理执行的多次调用转化为代码for循环,蕾丝hardcode方式,减少执行的函数调用次数,当数据记录多时,这个调用次数时很大的。
3,合并dataframe和datasets,1.6的dataset包含了dataframe的功能,这样两者存在很大冗余,所以2.0将两者统一,保留dataset api,把dataframe表示为dataset[Row],即dataset的子集。dataframe是sql查询结果rdd的抽象类,相当于java里的resultset。
4,结构化流计算,sparkstreaming是把流计算看成一个一个的离线计算来完成流计算,提供一套dstream的流api,相比其他的流计算,sparkstreaming的优点是容错行和吞吐量上有优势,在2.0以前的版本,用户在使用时,如果有流计算,又有离线计算,就需要两套api去编写程序,一套是rddapi,一套是dstream api,而且dstream api在易用性上远不如sql或dataframe。为了真正将流计算和离线计算在编程api上统一,同时也让streaming作业能够享受dataframe/dataset上所带来的优势:性能提升和API易用,于是提出了structed streaming,最后我们只需要基于dataframe/dataset可以开发离线计算和流计算的程序,很容易使得spark在api跟业界所说的dataflow来统一离线计算和流计算效果一样。比如在做batch聚合时我们可以写成下面代码:
logs = ctx.read.format("json").open("s3://logs")
logs.groupBy(logs.user_id).agg(sum(logs.time)).write.format("jdbc").save("jdbc:mysql//...")
那么对于流计算时,我们仅仅是调用了dataframe/dataset的不同函数代码,如下:
logs = ctx.read.format("json").stream("s3://logs")
logs.groupBy(logs.user_id).agg(sum(logs.time)).write.format("jdbc").stream("jdbc:mysql//...")
5,sql优化,增加了以前很多不支持的sql语句
6,采用vectorized Parquet decoder读取parquet上数据,以前是一行一行的读取,然后处理,现在改为一次读取4096行记录,不需要没处理一行纪录去调用一次parquet获取记录的方法,而是改为一批去调用一次(spark-12854) 。加上parquet本身是列存储,这个优化使得parquet读取速度提高三倍
采用radix sort提高sort的性能(spark-14724)。在某些情况下排序性能可以提高10~20倍
使用vectorizedhashmap来代替java的hashmap加速groupby的执行
将hive中的window函数用native spark window实现,因为native spark window在内存管理上有优势
避免复杂语句中的逻辑相同部分在执行时重复计算
压缩算法默认使用lz4
mllib里的计算用dataframe-based api代替以前的rdd计算逻辑
提供更多的r语言算法
使用scala-2.11编译运行
在和旧版本的兼容方面,将hive语句解析以及语法移动到core里,在没有hive原数据库和hive依赖包时,我们可以像以前版本使用标准sql一样去使用hivesql语句。
上述内容就是spark2.0新特性的示例分析,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。