JavaSpark写RDD到ES时指定文档ID的

spark版本:2.3

ES版本:7.1

问题描述:

  在通过JavaSpark写入数据到ES过程中,需要对文档id进行手动指定。

  在查询ES官网之后,返现官网介绍中是有次方法的:

  

 

   可以看到,JavaEsSpark.saveToEs该方法是有一个这样的构造方法,需要传入一个ImmutableMap参数

  ImmutableMap.of("es.mapping.id","id")

  其中"id"即为RDD中的存在的某个字段

问题:

  在使用该方法的时候,我试图传一个这个方法进去,发现类型不对,试了各种方式,都是不行,最后发现这里是需要的一个scala类型的map类型,问题表象如下:

 

 解决:

  既然不行,程序需要的是一个scala类型的map,那我就给它传一个这样的类型进去,但是在java中直接创建一个scala类型的map是不那么好搞的,所以需要想办法将java类型的map转换为scala类型的map。

  此时是,我单独写了一个工具类,转么就是将java类型的map转换为scala类型的map:

  该工具类具体实现可参见 :javaMapConvertToScalaMap

最终实现方式:

  

 

 

在此记录,希望对遇到同样问题的砖友有帮助

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章