我尝试使用elasticsearch-hadoop-2.1.0.rc1.jar
jar文件(找到here)将SparkR 1.4.0挂钩到Elasticsearch。它需要一些黑客攻击,调用SparkR:::callJMethod
函数。我需要为几个Java类获取一个jobj
R对象。对于某些课程,这有效:
SparkR:::callJStatic('java.lang.Class',
'forName',
'org.apache.hadoop.io.NullWritable')
但对于其他人来说,却没有:
SparkR:::callJStatic('java.lang.Class',
'forName',
'org.elasticsearch.hadoop.mr.LinkedMapWritable')
产生错误:
java.lang.ClassNotFoundException:org.elasticsearch.hadoop.mr.EsInputFormat
似乎Java没有找到org.elasticsearch.*
类,即使我尝试使用命令行--jars
参数和sparkR.init(sparkJars = ...)
函数包含它们
非常感谢任何帮助。此外,如果这是一个更适合实际SparkR问题跟踪器的问题,有人可以指点我吗?我看了,却找不到它。此外,如果有人知道将SparkR
挂钩到Elasticsearch
的另一种方式,我也很高兴听到这一点。
谢谢! 本
答案 0 :(得分:1)
以下是我如何实现它:
a
(Spark 1.4.1,Elasticsearch 1.5.1,OS X Yosemite上的ES-Hadoop 2.1)
关键的想法是链接到ES-Hadoop包而不是jar文件,并使用它直接创建Spark SQL上下文。