spark RDD进行行转列并且生成唯一标识

比如说像这样的一条数据:

("1",Seq("你好","我爱"))

想转化为如下形式:

(1,你好)
(1,我爱)

直接撸代码:

 这里面的转化看懂了么。其实很简单,生成一个List,List((1,你好), (1,我爱)),然后就是wordcount里面使用的flatMap把list打扁生成一个大的list。然后使用zipWithIndex生成一个有序id,一定要collect才会生效。

注意:因为使用了collect,所以只有在数据量不大的时候才能用该方法。不然的话,:) 自己试试就知道了。

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

object WordCount {
  def main(args: Array[String]): Unit = {
      //for (i <- 0 until 9) println(i)
      val conf=new SparkConf().setAppName("IDFTagsTrain_20170912")
      .setMaster("local")
      val sc=new SparkContext(conf)

      //val a=sc.textFile("file:///C:/Users/Administrator/Documents/data/*").flatMap(line => line.split(" ")).map(x=>(x,1)).reduceByKey(_+_).map(_._1).repartition(1).saveAsTextFile("file:///F:/Tags/Mydata")
      val a=sc.textFile("F:/Tags/article.txt").map(x=>{
        ("1",Seq("你好","我爱"))
      }).map(x=>{
        val aid=x._1.toString
        val arr:Seq[(String,String)]=x._2.map(x=>{
          (aid,x)
        })
        println(arr)
        arr
      }).flatMap(x=>x).zipWithIndex().collect().foreach(println)
  }
}

复制粘贴跑一下就知道了

希望能帮到有需要的朋友。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值