elasticsearch,Java,Json,Scala,Apache Spark,elasticsearch" /> elasticsearch,Java,Json,Scala,Apache Spark,elasticsearch" />

Java 从Spark立即索引Json字符串到Elasticsearch

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).

是否可以立即将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).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")
有关更多详细信息,请查看