spark写入到es集群

2 篇文章 0 订阅
2 篇文章 0 订阅

spark2.x写入数据到ElasticSearch5.X集群,首先说明,到目前为止,我使用过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依赖,一定要注意版本的准确。

第一点改变的就是,这里的用法并不像之前的,使用rdd.saveToEs(。。。)就可以写入elasticsearch,在spark2.x中,会报错没有这个方法。

官方文档中有这个例子,并给出了步骤,这样操作可以成功写入,并且写入的两列,就是 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资料真的不是很多。 碰到问题,首先查官网!这是这次的教训。

https://www.2cto.com/kf/201708/663570.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值