spark2.x写入数据到ElasticSearch5.X集群

来源:互联网 发布:网络通讯测试软件 编辑:程序博客网 时间:2024/06/06 03:58
首先说明,到目前为止,我使用过spark1.6写入数据到ES2.4中,使用很简单。
当我使用spark1.6写入到ES5.5的时候,一直不成功。
官网首先就讲了
through the dedicated support available since 2.1 or through the Map/Reduce bridge since 2.0. Spark 2.0 is supported in elasticsearch-hadoop since version 5.0.

在本地测试,发现使用spark2.x可以,就改scala版本为 2.11.8,将maven依赖换成spark2.1.0版本的,反正在本地测试,修改的东西并不多。
修改maven依赖,一定要注意版本的准确。
<!--<dependency>-->
  <!--<groupId>org.elasticsearch</groupId>-->
  <!--<artifactId>elasticsearch-spark-20_2.11</artifactId>-->
  <!--<version>5.5.0</version>-->
<!--</dependency>-->


第一点改变的就是,这里的用法并不像之前的,使用rdd.saveToEs(。。。)就可以写入elasticsearch,在spark2.x中,会报错没有这个方法。
官方文档在这里: https://www.elastic.co/guide/en/elasticsearch/hadoop/master/spark.html


官方文档中有这个例子,并给出了步骤,这样操作可以成功写入,并且写入的两列,就是  departure,  arrival 


像上图这种,那么自定义的rdd,如何将内容写入ES,如下:

package com.bigsun
import org.apache.spark.sql.SparkSession
import org.elasticsearch.spark
import org.elasticsearch.spark.rdd.EsSpark

object App{
  case class Trip(content: String)
  def main(args: Array[String]): Unit = {
    println( "Hello World!" )
    System.setProperty("hadoop.home.dir", "G:\\hadoop_home")
    val spark = SparkSession.builder()
      .appName("SparkTest")
      .master("local[5]")
      .config("es.index.auto.create", "true")
      .config("pushdown", "true")
      .config("es.nodes", "192.168.2.5")
      .config("es.port", "9200")
      .config("es.nodes.wan.only", "true")
      .getOrCreate()

    //从ES中读取数据
    val sparkDF = spark.sqlContext.read.format("org.elasticsearch.spark.sql").load("index/external")
    sparkDF.take(10).foreach(println(_))

    import spark.implicits._
    val data = spark.read.textFile("g:\\mydata\\*")

    //写入到ES,一定要按照这个格式,因为这种格式才带有元数据信息,content就是ES中的列名
    val rdd = data.rdd.map{
      x => Trip(x)
    }
    EsSpark.saveToEs(rdd, "index/external")
    spark.stop()
  }
}
一定要将rdd转换成case class中的格式,按照我的理解,这里就是指定在ES中的列名。 最后将完整的春江花月夜写入到ES中。


spark1.x是否可以这样写入,还待测试。如果想知道答案,请联系我。

最后,网上关于es5.x 和 spark2.x资料真的不是很多。 碰到问题,首先查官网!这是这次的教训。

图显示不出来?就是ES的截图而已。
原创粉丝点击