美文网首页
【ElasticSearch】EsSparkSQL.saveTo

【ElasticSearch】EsSparkSQL.saveTo

作者: PowerMe | 来源:发表于2017-12-14 19:26 被阅读476次

    记录下下午ES写入数据遇到的问题
    编译问题
    自己的项目pom文件依赖了<Spark-SQL>、<Spark-Core>和<elasticsearch-spark-20_2.11>,在编译时报下图的错误:

    • image.png

      看了一下是Spark版本不匹配,因为<elasticsearch-spark-20_2.11>也依赖了Spark的版本,与我自己单独依赖的版本不一致,于是我将<elasticsearch-spark-20_2.11>中对于Spark的依赖剔除了:

    • image.png

    重新编译成功。

    写入问题
    比如我有一个case class Person(id: Int, name: String, address: String),我用

    val df = sparkSession.createDataFrame(List(Person(1, "xiaoming","beijing")))

    转换成DF,然后写入:

    val map = Map("es.mapping.id" -> "esid")
    EsSparkSQL.saveToEs(df, "myindex/type", map)

    报错:
    Caused by: org.elasticsearch.hadoop.EsHadoopIllegalArgumentException: [DataFrameFieldExtractor for field [[uiy]]] cannot extract value from entity [class java.lang.String] | instance [......]

    原因:"es.mapping.id"参数指定文档的id,这个参数必须配置成DataFrame中已有的字段,不能随意指定。配置成 val map = Map("es.mapping.id" -> "id"),数据导入成功。

    相关文章

      网友评论

          本文标题:【ElasticSearch】EsSparkSQL.saveTo

          本文链接:https://www.haomeiwen.com/subject/bhhlwxtx.html