spark rdd 分组统计多列聚合

我的天空永远蔚蓝 2018-06-10 09:57:03
数据如下
a,1,3
a,2,4
b,1,1
我想根据第一列统计出
a,3,7
b,1,1
用 rdd实现
...全文
3951 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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!!!

1,270

社区成员

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

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