spark RDD進行行轉列並且生成唯一標識
阿新 • • 發佈:2018-12-16
比如說像這樣的一條資料:
("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) } }
複製貼上跑一下就知道了
希望能幫到有需要的朋友。