1. 程式人生 > >spark RDD進行行轉列並且生成唯一標識

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

複製貼上跑一下就知道了

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