美文网首页
【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