下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

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

作者:知晓的老巢     来源: 博客园点击数:933发布时间: 2020-05-18 09:45:09

标签: 数据处理数据分析数据库技术

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

赞(8)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程