推荐系统是机器学习当前最著名、最广泛使用,且已经证明价值的落地案例。尽管有许多资源可用作训练推荐模型的基础,但解释如何实际部署这些模型来创建大型推荐系统的资源仍然相对较少。
笔者找到个IBM的Code Pattern演示使用 Apache Spark 和 Elasticsearch 创建这样一个系统的关键要素。但是,该案例是5年前的2017年,对应的ES(Elasticsearch) 5.3.0,spark2.2.0;到如今很多软件已经不匹配,特别当时使用矢量评分插件进行模型向量相似度计算,现在这个功能在新版本ES中原生支持。为此,在follow其原理精髓的实践过程中,因地制宜做了扩展和修改,自以为对同道者有些许参考价值,同时也记录自己学习思考过程。
Demo展示的数据逻辑处理流程,基于开源的数据集的操作;而实际部署是流式处理,引入Kafa做数据接入和分发(根据搜索的资料),详见下图
原文发表于2017年,Elasticsearch版本比较古老用的时5.3.0,而到现在主流7.x,改动很大;使用矢量评分插件进行打分计算相似,现在版本原生的Dense Vector就支持该功能。
软件 | 原版本(中文)版本 | 原Demo(英文)版本 | 我的版本 |
---|---|---|---|
Elasticsearch | 5.3.0 | 7.6.2 | 7.15.1 |
elasticsearch-hadoop | elasticsearch-spark-20_2.11-5.3.0.jar | elasticsearch-spark-20_2.11-7.6.2.jar | elasticsearch-spark-20_2.12-7.15.1.jar |
spark | spark-2.2.0-bin-hadoop2.7 | spark-2.4.5-bin-hadoop2.7 | spark-3.1.2-bin-hadoop3.2 |
由于spark 3 使用scala 2.12编译,所以用的elastic-hadoop连接器的scala版本也应该是scala 2.12,这个在当前elasticsearch官网上没找到,用maven去下载。
PYSPARK_DRIVER_PYTHON="jupyter" PYSPARK_DRIVER_PYTHON_OPTS="notebook" ../spark-2.4.5-bin-hadoop2.7/bin/pyspark --driver-memory 4g --driver-class-path /FULL_PATH/elasticsearch-hadoop-7.6.2/dist/elasticsearch-spark-20_2.11-7.6.2.jar
import os
import sys
# os.environ
print(os.environ["SPARK_HOME"])
os.environ["PYLIB"] = os.environ["SPARK_HOME"] + "/python/lib"
sys.path.insert(0, os.environ["PYLIB"] +"/py4j-0.10.9-src.zip")
sys.path.insert(0, os.environ["PYLIB"] +"/pyspark.zip")
from pyspark import SparkConf
from pyspark import SparkContext
from pyspark.sql import SparkSession
spark = SparkSession.builder.config('spark.driver.extraClassPath', '/usr/local/elasticsearch-hadoop-7.15.1/dist/elasticsearch-spark-30_2.12-7.15.1.jar').appName("spark").getOrCreate()
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。