Java 从Spark立即索引Json字符串到Elasticsearch
是否可以立即将Spark中的JSON字符串索引到Elasticsearch?我不想要任何中间的Scala case类或POJO 我使用的是Spark、Scala和Elastic 5.5 我的代码如下所示:Java 从Spark立即索引Json字符串到Elasticsearch,java,json,scala,apache-spark,elasticsearch,Java,Json,Scala,Apache Spark,elasticsearch,是否可以立即将Spark中的JSON字符串索引到Elasticsearch?我不想要任何中间的Scala case类或POJO 我使用的是Spark、Scala和Elastic 5.5 我的代码如下所示: val s = xml .map { x => import org.json.XML XML.toJSONObject(x).toString }.top(1) spark.sparkContext.makeRDD(s).
val s = xml
.map { x =>
import org.json.XML
XML.toJSONObject(x).toString
}.top(1)
spark.sparkContext.makeRDD(s).saveToEs("test/article")
然而,我不断得到:
org.apache.spark.util.TaskCompletionListenerException: Found unrecoverable error [127.0.0.1:9200] returned Bad Request(400) - failed to parse; Bailing out..
at org.apache.spark.TaskContextImpl.invokeListeners(TaskContextImpl.scala:138)
即使我可以使用Kibana或其他ES客户端为JSON字符串编制索引
在这段代码中,我只是将包含XML内容字符串的RDD转换为JSON,然后尝试在ES中建立索引。是的,使用
.saveJsonToEs
方法:如果对象已经是JSON格式,则可以使用下一种方法:
import org.apache.spark.SparkContext
import org.elasticsearch.spark.rdd.EsSpark
val jsonField = .....//some json
val rdd = sc.makeRDD(jsonField)
EsSpark.saveToEs(rdd, "spark/docs")
val persitedObject = .....//some json
sparkContext.makeRDD(persitedObject)
.saveJsonToEs("spark/docs")
如果您的对象在写入操作之前不是JSON类型,您可以简化您的生活并使用将其转换为JSON格式的方法:
import org.apache.spark.SparkContext
import org.elasticsearch.spark.rdd.EsSpark
val jsonField = .....//some json
val rdd = sc.makeRDD(jsonField)
EsSpark.saveToEs(rdd, "spark/docs")
val persitedObject = .....//some json
sparkContext.makeRDD(persitedObject)
.saveJsonToEs("spark/docs")
有关更多详细信息,请查看