数据库技术:Spark高级算子aggregate所遇到的坑

    作者:知晓的老巢更新于: 2020-05-18 09:45:05

      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平台上直接开始数据分析之旅

课课家教育

未登录

1