用線性迴歸無編碼實現文章瀏覽數預測

tankII發表於2021-09-09

我純粹使用SQL和配置實現了一個更為複雜一些的,計算文章詞彙的tf/idf值,將瀏覽數作為預測值,使用線性迴歸演算法進行模型訓練的示例。幫助大家更好的瞭解StreamingPro對演算法的優秀支援。這篇文章的示例將會跑在Spark 2.0 上了。為了方便大家體驗,我已經將Spark 安裝包,StreamignPro,以及分詞包都準備好,大家下載即可。

準備工作

  • 下載

  • 下載

  • 下載分詞包

我們假設你下載的StreamingPro,ansi-seg包在/tmp目錄下。然後將Spark 2.0 解壓,進入主目錄。

複製如下模板

我已經發布了三個配置檔案,分別計算:

  1. 詞彙的 idf 值 ,

  2. 給每個詞彙生成一個唯一的數字標示,

  3. 使用線性迴歸演算法進行訓練,

PS : 有道筆記有時候第一次刷不出來,你重新整理下就好。

複製儲存三個檔案:

  1. /tmp/idf.json

  2. /tmp/term-index.json

  3. /tmp/lr-train.json

本機執行

生成idf 檔案:

cd  $SPARK_HOME./bin/spark-submit   --class streaming.core.StreamingApp 
--master local[2] 
--name test 
--jars /tmp/ansj_seg-5.0.0-all-in-one.jar 
/tmp/streamingpro-0.3.3-SNAPSHOT-online-mllib-2.0.0.jar 
-streaming.name test    
-streaming.platform spark   
-streaming.job.file.path file:///tmp/idf.json

生成內容會儲存成Parquet檔案。在/tmp/idf 目錄下可以看到具體檔案。

接著生成 term index ,檔案位於 /tmp/term-with-index,最後進行模型訓練,訓練好的模型在/tmp/lr-model

後續只要在Spark Streaming中載入,即可完成流式計算。

配置檔案簡要說明

以lr-train.json為例,大體框架如下:

{  "lr1": {    "desc": "LR模型訓練Job",    "strategy": "streaming.core.strategy.SparkStreamingStrategy",    "compositor": [  ]
  },  "udf_register": {    "desc": "透過這個方式可以註冊你自己開發的udf函式",    "strategy": "streaming.core.strategy.SparkStreamingRefStrategy",    
        "compositor": [  ]
  },  "term_index_ref_table": {    "desc": "在這裡申明表,可以在job中被引用",    "strategy": "streaming.core.strategy.SparkStreamingRefStrategy",    "algorithm": [],    "ref": [],     "compositor": [  ]
  },  "term_idf_ref_table": {    "desc": "在這裡申明表,可以在job中被引用",    "strategy": "streaming.core.strategy.SparkStreamingRefStrategy",    
    "algorithm": [],    "ref": [],     "compositor": [  ]
  }
}

這裡有一個job,兩個關聯表,一個UDF函式註冊模組。我在配置檔案的描述中已經有說明。job 是一個可執行的main函式,你可以這麼理解。關聯表申明後可以直接在job的sql中使用。UDF函式註冊模組則可以使得你很容易擴充套件SQL的功能。

他們唯一的區別是,Job 的strategy 是 SparkStreamingStrategy,而其他非Job則是SparkStreamingRefStrategy

因為一個配置檔案裡可能有多個Job,每個Job引用的關聯表也是不一樣,你需要顯示指定引用,在Job 的ref中申明即可:

  "lr1": {    "strategy": "streaming.core.strategy.SparkStreamingStrategy",    "ref": [      "udf_register",      "term_index_ref_table",      "term_idf_ref_table"
    ],    "compositor": [

這樣框架自動為你準備好關聯引用,註冊UDF函式,然後在lr1 這個job中就可以使用了。比如lr裡的parse 函式就是透過udf_register模組提供的。

之後就是定義輸入,執行的SQL,以及輸出(儲存或者模型引擎)。 SQL在案例中你可以看到,可以非常複雜,多個SQL模組之間可以互相作用,透過多條SQL實現一個複雜的邏輯。比如我們這裡試下了tf/idf計算等功能。



作者:祝威廉
連結:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/1795/viewspace-2819308/,如需轉載,請註明出處,否則將追究法律責任。

相關文章