小實踐(5)倒排索引
阿新 • • 發佈:2018-12-22
背景
搜尋引擎通常都會建立關鍵字的倒排索引,由關鍵字為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大資料分析實戰 大資料實戰))
其他
給出其他書本中的一份程式碼: