【发布时间】:2019-11-07 18:46:18
【问题描述】:
我正在尝试通过将 Elasticsearch 与 Apache Spark 集成来构建推荐系统。我正在使用 Java。我使用 movilens 数据集作为示例数据。我也将数据索引到 Elasticsearch。到目前为止,我已经能够从 Elasticsearch 索引中读取输入,如下所示:
SparkConf conf = new SparkConf().setAppName("Example App").setMaster("local");
conf.set("spark.serializer", org.apache.spark.serializer.KryoSerializer.class.getName());
conf.set("es.nodes", "localhost");
conf.set("es.port", "9200");
JavaSparkContext sc = new JavaSparkContext(conf);
JavaPairRDD<String, Map<String, Object>> esRDD = JavaEsSpark.esRDD(sc, "movielens/recommendation");
使用 esRDD.collect() 函数,我可以看到我正在正确地从弹性搜索中检索数据。现在我需要将 Elasticsearch 结果中的用户 ID、项目 ID 和偏好提供给 Spark 的推荐。如果我使用的是 csv 文件,我可以这样做:
String path = "resources/user_data.data";
JavaRDD<String> data = sc.textFile(path);
JavaRDD<Rating> ratings = data.map(
new Function<String, Rating>() {
public Rating call(String s) {
String[] sarray = s.split(" ");
return new Rating(Integer.parseInt(sarray[0]), Integer.parseInt(sarray[1]),
Double.parseDouble(sarray[2]));
}
}
);
如果我需要遍历存储在 esRDD 中的弹性搜索输出并创建与上述类似的映射,那么什么是等效映射?如果有任何我可以参考的示例代码,那将有很大帮助。
【问题讨论】:
标签: elasticsearch apache-spark