2015-06-25 42 views
0

我想使用elasticsearch-hadoop-2.1.0.rc1.jar jar文件(找到here)將SparkR 1.4.0掛鉤到Elasticsearch。它需要一些黑客入侵,調用SparkR:::callJMethod函數。我需要爲幾個Java類獲得一個jobj R對象。對於一些類,這個工程: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'指定的jar的方式存在一個錯誤。我們在幾天前通過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主機名? – gsuresh92

相關問題