繼 無編碼利用協(xié)同算法實(shí)現(xiàn)個性化推薦,我純粹使用SQL和配置實(shí)現(xiàn)了一個更為復(fù)雜一些的夫植,計(jì)算文章詞匯的tf/idf值,將瀏覽數(shù)作為預(yù)測值油讯,使用線性回歸算法進(jìn)行模型訓(xùn)練的示例详民。幫助大家更好的了解StreamingPro對算法的優(yōu)秀支持。這篇文章的示例將會跑在Spark 2.0 上了陌兑。為了方便大家體驗(yàn)沈跨,我已經(jīng)將Spark 安裝包,StreamignPro,以及分詞包都準(zhǔn)備好兔综,大家下載即可饿凛。
準(zhǔn)備工作
下載分詞包 ansj-seg
我們假設(shè)你下載的StreamingPro,ansi-seg包在/tmp目錄下软驰。然后將Spark 2.0 解壓涧窒,進(jìn)入主目錄。
復(fù)制如下模板
我已經(jīng)發(fā)布了三個配置文件锭亏,分別計(jì)算:
PS : 有道筆記有時候第一次刷不出來,你刷新下就好慧瘤。
復(fù)制保存三個文件:
- /tmp/idf.json
- /tmp/term-index.json
- /tmp/lr-train.json
本機(jī)運(yùn)行
生成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
生成內(nèi)容會存儲成Parquet文件戴已。在/tmp/idf 目錄下可以看到具體文件。
接著生成 term index ,文件位于 /tmp/term-with-index锅减,最后進(jìn)行模型訓(xùn)練糖儡,訓(xùn)練好的模型在/tmp/lr-model
后續(xù)只要在Spark Streaming中加載,即可完成流式計(jì)算怔匣。
配置文件簡要說明
以lr-train.json為例握联,大體框架如下:
{
"lr1": {
"desc": "LR模型訓(xùn)練Job",
"strategy": "streaming.core.strategy.SparkStreamingStrategy",
"compositor": [ ]
},
"udf_register": {
"desc": "通過這個方式可以注冊你自己開發(fā)的udf函數(shù)",
"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,兩個關(guān)聯(lián)表拴疤,一個UDF函數(shù)注冊模塊。我在配置文件的描述中已經(jīng)有說明独泞。job 是一個可執(zhí)行的main函數(shù)呐矾,你可以這么理解。關(guān)聯(lián)表申明后可以直接在job的sql中使用懦砂。UDF函數(shù)注冊模塊則可以使得你很容易擴(kuò)展SQL的功能蜒犯。
他們唯一的區(qū)別是组橄,Job 的strategy 是 SparkStreamingStrategy
,而其他非Job則是SparkStreamingRefStrategy
。
因?yàn)橐粋€配置文件里可能有多個Job,每個Job引用的關(guān)聯(lián)表也是不一樣罚随,你需要顯示指定引用玉工,在Job 的ref中申明即可:
"lr1": {
"strategy": "streaming.core.strategy.SparkStreamingStrategy",
"ref": [
"udf_register",
"term_index_ref_table",
"term_idf_ref_table"
],
"compositor": [
這樣框架自動為你準(zhǔn)備好關(guān)聯(lián)引用,注冊UDF函數(shù)淘菩,然后在lr1 這個job中就可以使用了遵班。比如lr里的parse 函數(shù)就是通過udf_register模塊提供的。
之后就是定義輸入潮改,執(zhí)行的SQL,以及輸出(存儲或者模型引擎)狭郑。 SQL在案例中你可以看到,可以非常復(fù)雜汇在,多個SQL模塊之間可以互相作用翰萨,通過多條SQL實(shí)現(xiàn)一個復(fù)雜的邏輯。比如我們這里試下了tf/idf計(jì)算等功能糕殉。