0

elasticsearch-hadoop-2.1.0.rc1.jar我正在尝试使用jar 文件(在此处找到)将 SparkR 1.4.0 连接到 Elasticsearch 。它需要一些黑客攻击,调用该SparkR:::callJMethod函数。我需要jobj为几个 Java 类获取一个 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

org.elasticsearch.*即使我尝试将它们与命令行--jars参数和函数一起包含在内, Java 似乎也没有找到这些类sparkR.init(sparkJars = ...)

任何帮助将不胜感激。此外,如果这是一个更适合实际 SparkR 问题跟踪器的问题,有人可以指点我吗?我看了看,没能找到。另外,如果有人知道另一种连接方式SparkRElasticsearch我也很乐意听到。

谢谢!本

4

1 回答 1

1

这是我实现它的方法:

# environments, packages, etc ----
Sys.setenv(SPARK_HOME = "/applications/spark-1.4.1")
.libPaths(c(file.path(Sys.getenv("SPARK_HOME"), "R", "lib"), .libPaths()))

library(SparkR)

# connecting Elasticsearch to Spark via ES-Hadoop-2.1 ----
spark_context <- sparkR.init(master = "local[2]", sparkPackages = "org.elasticsearch:elasticsearch-spark_2.10:2.1.0")
spark_sql_context <- sparkRSQL.init(spark_context)
spark_es <- read.df(spark_sql_context, path = "index/type", source = "org.elasticsearch.spark.sql")
printSchema(spark_es)

(OS X Yosemite 上的 Spark 1.4.1、Elasticsearch 1.5.1、ES-Hadoop 2.1)

关键思想是链接到 ES-Hadoop 包而不是 jar 文件,并使用它直接创建 Spark SQL 上下文。

于 2015-08-07T16:07:06.817 回答