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
我确信我遗失了一些明显的东西;任何指导赞赏!
答案 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")
sparkR.session(master="your_spark_master",
sparkPackages=sparkPackages,
sparkConfig=sparkConfig)
做一些魔术,生成想要保存到ES的sparkDataframe
将数据框写入ES:
write.df(yourSparkDF, source="org.elasticsearch.spark.sql",
path= "your_ES_index_path"
)