记录下下午ES写入数据遇到的问题
一 编译问题
自己的项目pom文件依赖了<Spark-SQL>、<Spark-Core>和<elasticsearch-spark-20_2.11>,在编译时报下图的错误:
-
看了一下是Spark版本不匹配,因为<elasticsearch-spark-20_2.11>也依赖了Spark的版本,与我自己单独依赖的版本不一致,于是我将<elasticsearch-spark-20_2.11>中对于Spark的依赖剔除了:
重新编译成功。
二 写入问题
比如我有一个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"),数据导入成功。