elasticsearch - Spark R 1.4.0 : how to include jars

标签 elasticsearch apache-spark sparkr elasticsearch-hadoop

我正在尝试使用 elasticsearch-hadoop-2.1.0.rc1.jar 将 SparkR 1.4.0 连接到 Elasticsearch jar 文件(找到 here)。它需要一些黑客攻击,调用 SparkR:::callJMethod功能。我需要获得 jobj几个 Java 类的 R 对象。对于某些类(class),这有效:

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 问题跟踪器的问题,有人可以指点我吗?我看了看,没能找到。另外,如果有人知道另一种方法来 Hook SparkR高达 Elasticsearch ,我也很高兴听到这个消息。

谢谢!

最佳答案

这是我实现它的方法:

# 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 上下文。

关于elasticsearch - Spark R 1.4.0 : how to include jars,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31056399/

相关文章:

apache-spark - Spark 2.1 - 实例化 HiveSessionState 时出错

r - 从 R 笔记本访问 Azure Blob 存储

elasticsearch 返回的分面数

elasticsearch - 如何在 ElasticSearch 中进行索引查询?

postgresql - 从 Spark 连接到 Postgres 时出现 NullpointerException - 为什么?

python-3.x - SparkSession 在本地独立集群上花费的时间太长

apache-spark - SparkR - 为数据挖掘创建测试和训练数据帧

r - 是否可以将 Spark 中的 data.table 与 Spark Dataframes 一起使用?

elasticsearch - 小写字母解决了ElasticSearch字词查询问题,但我不明白为什么

elasticsearch - 如何在ElasticSearch/Kibana中精确搜索URL