1. 程式人生 > >spark 求相鄰的元素有多少個?

spark 求相鄰的元素有多少個?

資料:

資料
A;B;C;D;B;D;C
B;D;A;E;D;C
A;B

如上面的資料,A,B有兩個 C,D有一個 D,C有兩個

/*
A;B;C;D;B;D;C
B;D;A;E;D;C
A;B
 */
object Demo2 {
  def main(args: Array[String]): Unit = {
    val session = SparkSession.builder().appName("Demo2").master("local[*]").getOrCreate()
    val file = session.read.textFile("D:\\資料\\case.txt").rdd

    val word1: RDD[String] = file.flatMap(_.split(";"))

    val words: RDD[Array[String]] = file.map(line=>{
      line.split(";")
    })
   // println(words.collect().toBuffer)//此時輸出的只是地址,要使用flatMap將裡面存在的資料壓平操作
    //ArrayBuffer([Ljava.lang.String;@5072e638, [Ljava.lang.String;@3129299f, [Ljava.lang.String;@2f73f0c7)
    val flatWord: RDD[(String, Int)] =words.flatMap(x=>{
      val size=x.length
      for (i<- 0 until size-1)
        yield (x(i)+","+x(i+1) -> 1)
    })
    val redce = flatWord.reduceByKey(_+_)
    redce.foreach(println)


//或者是直接使用
    val a= file.map(_.split(";")).flatMap(x=>{
      for(i<-0 until x.length-1) yield (x(i)+","+x(i+1) -> 1)
    }).reduceByKey(_+_).foreach(println)

    session.stop()
  }

}