2015-06-25 4 views
0

Я пытаюсь подключить SparkR 1.4.0 до Elasticsearch, используя файл jar файла elasticsearch-hadoop-2.1.0.rc1.jar (найдено here). Это требует немного взлома, созвав функцию SparkR:::callJMethod. Мне нужно получить объект jobj R для нескольких классов Java. Для некоторых классов, это работает:sparkR 1.4.0: как включить банки

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

Ошибка была связана с тем, что в SparkR использовались баночки, обозначенные символом '--jars'. У нас было исправление, проверенное пару дней назад на https://github.com/apache/spark/pull/7001. Если вы построите Spark из мастер-ветки, вы сможете попробовать это. –

ответ

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) 

(Спарк 1.4.1, 1.5.1 Elasticsearch, ES-Hadoop 2.1 на OS X Yosemite)

Основная идея заключается в ссылку на пакет ES-Hadoop, а не файл jar, и использовать его для непосредственного создания контекста Spark SQL.

+0

Как пройти ES Host Name? – gsuresh92