spark rdd 分组统计多列聚合

我的天空永远蔚蓝 2018-06-10 09:57:03
数据如下
a,1,3
a,2,4
b,1,1
我想根据第一列统计出
a,3,7
b,1,1
用 rdd实现
...全文
3962 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
忧云 2019-06-06
  • 打赏
  • 举报
回复
上面三行生成三个RDD,然后map(a->{a.split(",")[0],a.split(",")[1]+a.split(",")[2]})映射成以第0个为主的元组,出来三个元组的RDD,再进行join,在里面进行累加后map输入格式,进行合并相加就出现外面的数据了。
zsup 2018-12-11
  • 打赏
  • 举报
回复
我把测试数据放在/home下名为text.txt,步骤如下你可以参考
val rdd = sc.textFile("file:///home/text.txt")
case class Aoo(name:String,num1:Int,num2:Int)
val df = rdd.map(_.split(" ")).map(aoo => Aoo(aoo(0),aoo(1).trim.toInt,aoo(2).trim.toInt)).toDF()
df.show
df.createOrReplaceTempView(aoo)
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
sqlContext.sql("from(select name,sum(num1) as sum from aoo group by name)num1 join (select name,sum(num2) as sum from aoo group by name)num2 on num1.name=num2.name select num1.name,num1.sum,num2.sum order by name").show
测试结果如下我再做测试数据的时候写成了b,1,3,见谅见谅
_路人_ 2018-06-12
  • 打赏
  • 举报
回复

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

object RDDTest {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setAppName("RDDTest").setMaster("local
  • "
  • ) val sc = new SparkContext(conf); val input = sc.parallelize(List( List("a", 1, 3), List("a", 2, 4), List("b", 1, 1)), 3) // 根据数据数据类型,转化为(key, (value1, value2))形式的键值对 val maped: RDD[(String, (Int, Int))] = input.map { x => { val key = x(0).toString; val v1 = x(1).toString.toInt; val v2 = x(2).toString.toInt; (key, (v1, v2)) } } // 根据key进行合并, value1与value1合并, value2与value2合并 val reduced: RDD[(String, (Int, Int))] = maped.reduceByKey( (lastValue, thisValue) => { (lastValue._1 + thisValue._1, lastValue._2 + thisValue._2) } ) // 转换成原来的形式 val result: RDD[List[Any]] = reduced.map(x => List(x._1, x._2._1, x._2._2)) // 收集打印 result.collect().foreach(println) /** * List(a, 3, 7) * List(b, 1, 1) */ } }
过程很详细,你可以把List形式的装换成别的. 希望可以帮到你.
shiter 熟练 2018-06-11
  • 打赏
  • 举报
回复
data.flatMap(_.split("\t").map((_,1))).reduceByKey(_+_).collect().foreach(println) 类似这种
  • 打赏
  • 举报
回复
asdasdasd
  • 打赏
  • 举报
回复
mark!!!
  • 打赏
  • 举报
回复
mark!!!
【事件触发一致性】研究多智能体网络如何通过分布式事件驱动控制实现有限时间内的共识(Matlab代码实现)内容概要:本文围绕多智能体网络中的事件触发一致性问题,研究如何通过分布式事件驱动控制实现有限时间内的共识,并提供了相应的Matlab代码实现方案。文中探讨了事件触发机制在降低通信负担、提升系统效率方面的优势,重点分析了多智能体系统在有限时间收敛的一致性控制策略,涉及系统模型构建、触发条件设计、稳定性与收敛性分析等核心技术环节。此外,文档还展示了该技术在航空航天、电力系统、机器人协同、无人机编队等多个前沿领域的潜在应用,体现了其跨学科的研究价值和工程实用性。; 适合人群:具备一定控制理论基础和Matlab编程能力的研究生、科研人员及从事自动化、智能系统、多智能体协同控制等相关领域的工程技术人员。; 使用场景及目标:①用于理解和实现多智能体系统在有限时间内达成一致的分布式控制方法;②为事件触发控制、分布式优化、协同控制等课题提供算法设计与仿真验证的技术参考;③支撑科研项目开发、学术论文复现及工程原型系统搭建; 阅读建议:建议结合文中提供的Matlab代码进行实践操作,重点关注事件触发条件的设计逻辑与系统收敛性证明之间的关系,同时可延伸至其他应用场景进行二次开发与性能优化。

1,274

社区成员

发帖
与我相关
我的任务
社区描述
Spark由Scala写成,是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于MapReduce算法实现的分布式计算。
社区管理员
  • Spark
  • shiter
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧