我正在尝试使用elasticsearch-hadoop-2.1.0.rc1.jar jar文件(找到here)将SparkR 1.4.0连接到Elasticsearch。在调用SparkR:::callJMethod函数时,需要进行一些修改。我需要为几个jobj类获取Java对象。对于某些类,这是可行的:
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的替代方法,我也会很高兴听到。
谢谢!本
发布于 2015-08-08 00:07:07
下面是我是如何做到的:
# 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)(Spark 1.4.1,Elasticsearch 1.5.1,ES-Hadoop 2.1 on OS X Yosemite)
关键思想是链接到ES-Hadoop包而不是jar文件,并使用它直接创建Spark SQL上下文。
https://stackoverflow.com/questions/31056399
复制相似问题