Elasticsearch中如何使用Spark

本文介绍如何使用Spark与Elasticsearch进行数据交互,包括通过RDD的Map方式和JSON方式写入数据,以及从Elasticsearch中读取数据的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   Elasticsearch是一个实时的分布式搜索分析引擎,它被用作快速全文搜索、结构化搜索、分析以及这三个功能的结合。具体如何使用本文不做讲解,大家可以去Elasticsearch: 权威指南观看文档进行学习。

      本文主要是使用Spark读写Elasticsearch,基于以下版本开发测试。

       scala-version:2.11.8

       spark-version:2.2.0

       hadoop-version:2.7.0

接下来正式开始了。

1. 添加Maven依赖

<dependencies>

   <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_2.11</artifactId>
      <version>2.2.0</version>
   </dependency>

   <dependency>
      <groupId>org.elasticsearch</groupId>
      <artifactId>elasticsearch-hadoop</artifactId>
      <version>6.2.4</version>
   </dependency>

</dependencies>

2. 写数据到Elasticsearch

 2.1 RDD 的 Map 方式

import org.apache.spark.{SparkConf, SparkContext}
import org.elasticsearch.spark._
object ES2Spark {

  def main(args: Array[String]): Unit = {

      val conf = new SparkConf().setMaster("local").setAppName("ES2Spark")
        .set("es.index.auto.create", "true")
        .set("es.nodes", "127.0.0.1")
        .set("es.port", "9200")

      val sc = new SparkContext(conf)

      val numbers = Map("one"->1, "two"->2, "three"->3)
      val airports = Map("arrival"->"Otopeni", "SFO"->"San Fran")

      sc.makeRDD(Seq(numbers, airports)).saveToEs("spark/docs")

      sc.stop()
  }
}

  首先将elasticsearch后台启动(bin/elasticsearch -d),然后运行,结果可以通过http://127.0.0.1:9200/spark/docs/_search 进行查看

  2.2 RDD 的 JSON 方式

import org.apache.spark.{SparkConf, SparkContext}
import org.elasticsearch.spark.rdd.EsSpark
object ES2Spark {

  def main(args: Array[String]): Unit = {

      val conf = new SparkConf().setMaster("local").setAppName("ES2Spark")
        .set("es.index.auto.create", "true")
        .set("es.nodes", "127.0.0.1")
        .set("es.port", "9200")

      val sc = new SparkContext(conf)

      val json1 = """{"name":"jack", "age":24, "sex":"man"}"""
      val json2 = """{"name":"rose", "age":22, "sex":"woman"}"""

      val rddData = sc.makeRDD(Seq(json1, json2))

      EsSpark.saveJsonToEs(rddData, "spark/json")

      //自定义id
      EsSpark.saveJsonToEs(rddData, "spark/json", Map("es.mapping.id"->"name"))
      
      sc.stop()
  }
}

结果可以通过http://127.0.0.1:9200/spark/json/_search 进行查看

3. 从Elasticsearch读取数据

import org.apache.spark.{SparkConf, SparkContext}
import org.elasticsearch.spark.rdd.EsSpark
object ES2Spark {

  def main(args: Array[String]): Unit = {

      val conf = new SparkConf().setMaster("local").setAppName("ES2Spark")
        .set("es.index.auto.create", "true")
        .set("es.nodes", "127.0.0.1")
        .set("es.port", "9200")

      val sc = new SparkContext(conf)

      val result = EsSpark.esJsonRDD(sc, "spark/json", "?q=jack*")

      result.foreach(println)
      sc.stop()
  }
}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值