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)
  }
}

复制粘贴跑一下就知道了

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

你可能感兴趣的:(业务需求)