当前位置: 首页 > 技术与资源 > 技术分享 > 正文

大数据时代下统计分析的新利器——SparkR

2016-01-05 11:05:54

作者:吴泽锋新炬网络高级技术专家。


一、背景


R语言是一个非常优秀的统计分析和统计绘图的编程语言,它支持很多扩展以便支持数据处理和机器学习任务。然而目前R语言的核心运行环境是单机的,能处理的数据量受限于单机的内存容量。大数据时代的海量数据处理对R构成了巨大的挑战。为了能够使用R语言分析大规模分布式的数据,UC Berkeley给我们带来了SparkR,SparkR就是用R语言编写Spark程序,它很好解决了R语言的短板,大数据分布式存储和处理,水平扩展能力。


sparkR

二、概论


SparkR最初是由AMPlab开发的项目,旨在整合R的易用性和Spark的可扩展能力。这一项目后来得到了开源社区的大力支持,性能大幅提高。最近,SparkR项目被并入Apache Spark孵化项目并在1.4版本中作为alpha的组件发布。


三、SparkR DataFrames


SparkR的核心是SparkR DataFrames,是一个基于Spark的分布式数据框架。在概念上和关系型数据库中的表类似,或者和R语言中的data frame类似。Data Frames作为R的数据处理基本对象其概念已经被扩展到很多的语言。


1.广泛数据源


DataFrames的数据来源是非常广泛的:


?  JSON文件、Parquet文件、Hive数据表。


?  本地文件系统、分布式文件系统(HDFS)以及云存储(S3)。


?  通过JDBC读取外部关系型数据库系统。


?  通过Spark SQL的外部数据源(external data sources) API。


?  第三方扩展已经包含Avro、CSV、ElasticSearch和Cassandra。


2.高扩展性


在SparkR DataFrames 上执行的所有操作都会自动分发到Spark群集中的所有机器上进行处理。依赖spark原有的分布式内存计算框架,可以轻易用于TB数据的处理及水平服务器的扩展。


3.DataFrames的优化


与R/Python中data frame使用的eager方式不同,Spark中的DataFrames执行会被查询优化器自动优化。在DataFrame上的计算开始之前,Catalyst优化器会编译操作,这将把DataFrame构建成物理计划来执行。因为优化器清楚操作的语义和数据的结构,所以它可以为计算加速制定智能的决策。


首先,Catalyst提供了逻辑优化,比如谓词下推(predicate pushdown)。优化器可以将谓词过滤下推到数据源,从而使物理执行跳过无关数据。在使用Parquet的情况下,更可能存在文件被整块跳过的情况,同时系统还通过字典编码把字符串对比转换为开销更小的整数对比。在关系型数据库中,谓词则被下推到外部数据库用以减少数据传输。


第二,为了更好地执行,Catalyst将操作编译为物理计划,并生成JVM bytecode,这些通常会比人工编码更加优化。例如,它可以智能地选择broadcast joins和shuffle joins来减少网络传输。其次,同样存在一些较为低级的优化,如消除代价昂贵的对象分配及减少虚拟函数调用。


4.RDD API的支持


?  数据缓存控制:cache(),persist(),unpersist()


?  数据保存:saveAsTextFile(),saveAsObjectFile()


?  常用的数据转换操作,如map(),flatMap(),mapPartitions()等


?  数据分组、聚合操作,如partitionBy(),groupByKey(),reduceByKey()等


?  RDD间join操作,如join(), fullOuterJoin(), leftOuterJoin()等


?  排序操作,如sortBy(), sortByKey(), top()等


?  Zip操作,如zip(), zipWithIndex(), zipWithUniqueId()


?  重分区操作,如coalesce(), repartition()


总体上看,SparkR程序和Spark程序结构很相似。程序简洁易懂。毫无疑问,这将大幅度地降低大数据统计分析使用门槛。


借助Spark内存计算、统一软件栈上支持多种计算模型的优势,高效地进行分布式数据计算和分析,解决大规模数据集带来的挑战。SparkR必将成为大数据时代的数据分析统计又一门新利器。

上一篇:敏捷开发经验之谈
下一篇:如何结合Scrum和Kanban实施敏捷开发