如何使用SparkR读写ElasticSearch?

时间:2018-03-06 22:27:30

标签: r apache-spark elasticsearch apache-zeppelin sparkr

Begineer SparkR和ElasticSearch问题在这里!

如何使用多个节点将sparkR数据帧或RDD写入ElasticSearch?

存在specific R package for elastic,但没有提及hadoop或分布式数据帧。当我尝试使用它时,我收到以下错误:

install.packages("elastic", repos = "http://cran.us.r-project.org")
library(elastic)
df <- read.json('/hadoop/file/location')
connect(es_port = 9200, es_host = 'https://hostname.dev.company.com', es_user = 'username', es_pwd = 'password')
docs_bulk(df)
  

错误:类SparkDataFrame没有'docs_bulk'方法

如果这是pyspark,我会使用rdd.saveAsNewAPIHadoopFile() function as shown here,但我无法通过Google搜索在sparkR中找到有关它的任何信息。 ElasticSearch还有good documentation, but only for Scala and Java

我确信我遗失了一些明显的东西;任何指导赞赏!

1 个答案:

答案 0 :(得分:2)

要将您的SparkR会话连接到Elasticsearch,您需要使连接器jar和ES配置可用于您的SparkR会话。

1:指定jar(在elasticsearch文档中查找所需的版本;以下版本适用于spark 2.x,scala 2.11和ES 6.8.0)

sparkPackages <- "org.elasticsearch:elasticsearch-spark-20_2.11:6.8.0"

2:在SparkConfig中指定集群配置。您也可以在此处添加其他Elasticsearch配置(当然,还可以添加其他spark配置)

sparkConfig <- list(es.nodes = "your_comma-separated_es_nodes",
                    es.port = "9200")
  1. 启动sparkR会话
sparkR.session(master="your_spark_master", 
               sparkPackages=sparkPackages, 
               sparkConfig=sparkConfig)

  1. 做一些魔术,生成想要保存到ES的sparkDataframe

  2. 将数据框写入ES:

write.df(yourSparkDF, source="org.elasticsearch.spark.sql",
                 path= "your_ES_index_path"
         )