1. 程式人生 > >小實踐(5)倒排索引

小實踐(5)倒排索引

背景

         搜尋引擎通常都會建立關鍵字的倒排索引,由關鍵字為index,後面跟著包含該關鍵字的網頁,本次使用模擬資料,簡要嘗試一下,建立倒排索引的過程。

資料:

第一個元素為書名字,後面以空格分割,為書的關鍵字。


spark版本:

<dependency>
            <groupId>org.apache.spark</groupId>
            <artifactId>spark-core_2.11</artifactId>
            <version>2.1.0</version>
        </dependency>

正文

中間遇到一個問題,就是textfile讀出的資料,沒有reduceByKey方法,查看了一下,是因為textfile讀出的資料是dataset不是rdd。所以下面的程式碼中轉了一下rdd

object InvertedIndex {

  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().master("master")
      .appName("Inverted index").getOrCreate()
    import spark.implicits._

    val bookwordRdd = spark.read.textFile("dir").rdd
      .flatMap{
        line=>
          val array = line.split(" ",2)
          val bookName = array(0)
          array(1).split(" ").map(word=>(bookName,word))
      }
    val finalRDD = bookwordRdd.map(kv=>(kv._2,kv._1)).reduceByKey(_+" "+_).collect()

  }
}

執行結果:

finalRDD: Array[(String, String)] = Array((spark,Spark大資料分析實戰), (日誌分析,Spark大資料分析實戰 hadoop實戰), (mapreduce,hadoop實戰 大資料實戰), (hdfs,hadoop實戰 大資料實戰), (大資料,Spark大資料分析實戰 hadoop實戰), (namenode,hadoop實戰 大資料實戰), (推薦系統,Spark大資料分析實戰 大資料實戰))

其他

給出其他書本中的一份程式碼: