MySQL数据库工程师入门实战课程视频教程
4942 人在学
Spark是一种与Hadoop相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使Spark在某些工作负载方面表现得更加优越,换句话说,Spark启用了内存分布数据集,除了能够提供交互式查询外,它还可以优化迭代工作负载。
Spark是在Scala语言中实现的,它将Scala用作其应用程序框架。与Hadoop不同,Spark和Scala能够紧密集成,其中的Scala可以像操作本地集合对象一样轻松地操作分布式数据集。
Spark高级算子aggregate所遇到的坑
valrdd3=sc.parallelize(List("12","23","345","4567"),2)
rdd3.aggregate("")((x,y)=>math.max(x.length,y.length).toString,(x,y)=>x+y)
两个分区先计算出字符串的最大长度,然后合成字符串
结果可能是:”24”,也可能是:”42”,体现了并行化特点。
valrdd4=sc.parallelize(List("12","23","345",""),2)
rdd4.aggregate("")((x,y)=>math.min(x.length,y.length).toString,(x,y)=>x+y)
结果是:”10”,也可能是”01”,
原因:注意有个初始值””,其长度0,然后0.toString变成字符串。值"0".toString的长度为0,"0".toString.length的长度为1。分区可能为(“12”,“23”)和(“345”,“”);初始值为"",然后初始值和“12”,“34”比较,或者是""和“345”比较,然后和“”比较。
math.min("".length,"12".length)的结果是:0,math.min("0".length,"23".length)的结果是1
math.min("".length,"345".length)的结果是:0,math.min("0".length,"".length)的结果是:0
valrdd5=sc.parallelize(List("12","23","","345"),2)
rdd5.aggregate("")((x,y)=>math.min(x.length,y.length).toString,(x,y)=>x+y)
结果是:”11”,原因如下:
math.min("".length,"12".length)的结果是:0,math.min("0".length,"23".length)的结果是:1
math.min("".length,"".length)的结果是:0,math.min("0".length,"345".length)的结果是:1
注意:值"0".toString的长度为0,"0".toString.length的长度为1
尽管创建Spark是为了支持分布式数据集上的迭代作业,但是实际上它是对Hadoop的补充,可以在Hadoop文件系统中并行运行。通过名为Mesos的第三方集群框架可以支持此行为。
Spark由加州大学伯克利分校AMP实验室(Algorithms,Machines,andPeopleLab)开发,可用来构建大型的、低延迟的数据分析应用程序。
ApacheSpark是专为大规模数据处理而设计的快速通用的计算引擎。现在形成一个高速发展应用广泛的生态系统。
SparkR是一个为R提供了轻量级的Spark前端的R包。SparkR提供了一个分布式的dataframe数据结构,解决了R中的dataframe只能在单机中使用的瓶颈,它和R中的dataframe一样支持许多操作,比如select,filter,aggregate等等。(类似dplyr包中的功能)这很好的解决了R的大数据级瓶颈问题。
SparkR也支持分布式的机器学习算法,比如使用MLib机器学习库。SparkR为Spark引入了R语言社区的活力,吸引了大量的数据科学家开始在Spark平台上直接开始数据分析之旅