比如说像这样的一条数据:
("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)
}
}
复制粘贴跑一下就知道了
希望能帮到有需要的朋友。