ES 6.6.1使用Spark写入数据时报EsHadoopIllegalArgumentException错误如何解决
报错根因
ES 6.x及更早版本写入数据时强制要求同时指定索引名称和文档类型,格式要求为{索引名}/{类型名},你当前在save方法中仅传入了索引名my_index_name,缺少文档类型部分,因此触发参数校验异常。
解决方案
你可以任选以下一种方式修改代码即可解决问题:
- 方式1:直接修改save方法的传入路径,补充文档类型
你可以在原索引名后追加自定义的文档类型(例如通用的doc、_doc都可,也可根据业务自定义类型名),修改后的代码如下:df.write.format("org.elasticsearch.spark.sql") .option("es.mapping.id", "id") .mode("append").save("my_index_name/doc") - 方式2:通过option参数配置资源路径
你也可以将索引和类型的配置放到es.resource参数中,无需在save方法中传参,代码如下:df.write.format("org.elasticsearch.spark.sql") .option("es.mapping.id", "id") .option("es.resource", "my_index_name/doc") .mode("append").save()
小提示:如果后续有升级ES到7.x及以上版本的计划,建议文档类型使用
_doc,可以最大程度兼容高版本ES的默认配置,减少后续升级时的代码改动量。
内容的提问来源于stack exchange,提问作者Prasanta Sahoo
相关产品推荐
相关产品推荐

