SparkSql 读取elasticsearch 表数据

本文介绍如何使用Spark 2.3.2版本通过SparkSQL读取和写入Elasticsearch 5.3.3的数据。主要内容包括配置依赖、设置Spark配置项以及通过SparkSession和RDD方式操作Elasticsearch数据。

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

                            SparkSql 读取elasticsearch 表数据

1 版本

    Spark 2.3.2     ,elasticsearch 5.3.3  ,scala 2.11

2 Pom.xml 部分依赖

<dependency>
      <groupId>org.elasticsearch</groupId>
      <artifactId>elasticsearch-spark-20_2.11</artifactId>
      <version>5.3.3</version>
    </dependency>

    <dependency>
      <groupId>org.scala-lang</groupId>
      <artifactId>scala-library</artifactId>
      <version>${scala.version}</version>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-core_${scala.spark.version}</artifactId>
      <version>${spark.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-sql_2.11</artifactId>
      <version>${spark.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.spark</groupId>
      <artifactId>spark-streaming_2.11</artifactId>
      <version>${spark.version}</version>
      <exclusions>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
        </exclusion>
        <exclusion>
          <groupId>log4j</groupId>
          <artifactId>log4j</artifactId>
        </exclusion>

      </exclusions>

 3 spark-sql读写ES

   

object App extends App {


  println( "Hello World!" )

  val conf  = new SparkConf().setAppName("app1").setMaster("local[2]")
  conf.set("es.index.auto.create","true"); //在spark中自动创建es中的索引
  conf.set("es.nodes","192.168.220.128");//设置在spark中连接es的url和端口
  conf.set("es.port","9200");
  conf.set("es.nodes.wan.only","true");

  val spark =SparkSession.builder().config(conf).getOrCreate()

  //import spark.implicits._

  //read elasticsearch  layout session table
  val essessionDataFrame = spark.sqlContext.read
    .format("org.elasticsearch.spark.sql")
  .option("inferSchema", "true").load("index/type")
  essessionDataFrame.createOrReplaceTempView("sessionTable")
  essessionDataFrame.show()
 
  val rdd = essessionDataFrame.rdd
  //println(s"rdd = ${rdd}")
  rdd.saveToEs("index/type")

  spark.stop()
  println("over....")
}

   4  RDD 读写elaticsearch
   引用:阿粒_lxf
   链接:https://www.jianshu.com/p/8cf8b89b06e6  来源:简书

import org.apache.spark.rdd.RDD
import org.elasticsearch.spark._ 
object LoadElasticsearchData { 
    def main(args: Array[String]): Unit = { 
        val sc = new SparkContext(
      new SparkConf()
        .setAppName("e2e.computing.test")
        .setMaster("local[*]")
        .set("spark.cassandra.connection.host", "192.168.14.141")
        //.set("es.nodes", "192.168.14.140")
        //192.168.7.130:9200
        .set("es.nodes", "192.168.7.130")
        .set("es.port", "9200")
        .set("es.index.auto.create", "true")
        .set("es.mapping.date.rich", "false")
    )
    // ES的RDD  test_lxf   query = "查询串"  elasticsearch.spark 默认全部查出数据
    val query =
        s"""
           |{
           |  "query": {
           |    "match_all": {}
           |  }
           |}
         """.stripMargin
   val esRdd = sc.esRDD(s"index/type", query) 
}

spark RDD 写ES
import com.ffcs.itm.e2e.test.util
import org.elasticsearch.spark._


object SaveElasticsearch {
  def main(args: Array[String]): Unit = {
    val sc = new SparkContext(
      new SparkConf()
        .setAppName("e2e.computing.test")
        .setMaster("local[*]")
        .set("spark.cassandra.connection.host", "192.168.14.141")
        //.set("es.nodes", "192.168.14.140")
        //192.168.7.130:9200
        .set("es.nodes", "192.168.7.130")
        .set("es.port", "9200")
        .set("es.index.auto.create", "true")
        .set("es.mapping.date.rich", "false")
    )
    
    val airports = Map("OTP" -> "Otopeni", "SFO" -> "San Fran")
    //不存在就新建
    sc.makeRDD(Seq(airports)).saveToEs("index/type")
  }
}


 

SparkSQL是Apache Spark的一个模块,用于对大规模数据进行高性能处理和查询。Hive是一个数据仓库基础设施工具,提供了类似于SQL的查询语言,可以从数据仓库中提取和分析数据Elasticsearch是一个基于分布式搜索和分析引擎的开源工具,可以进行实时数据搜索、分析和可视化。 要将Hive数据查询结果存入Elasticsearch,首先需要创建一个SparkSession对象,并配置相应的Elasticsearch连接信息。然后,可以使用SparkSQL查询Hive数据,并将结果转换为DataFrame。接下来,需要使用Elasticsearch-Hadoop库将DataFrame中的数据写入Elasticsearch。 具体步骤如下: 1. 创建SparkSession对象: ```scala val spark = SparkSession.builder() .appName("Hive to Elasticsearch") .config("spark.sql.warehouse.dir", "/user/hive/warehouse") .enableHiveSupport() .getOrCreate() ``` 其中,`/user/hive/warehouse`是Hive默认的数据库路径。 2. 查询Hive数据: ```scala val data = spark.sql("SELECT * FROM table_name") // 通过SQL查询Hive数据 ``` 这里的`table_name`是要查询的Hive名,可以根据需要修改为实际名。 3. 将查询结果转换为DataFrame: ```scala val df = data.toDF() ``` 可以根据需要对DataFrame进行进一步的处理和转换。 4. 配置Elasticsearch连接信息: ```scala df.write .format("org.elasticsearch.spark.sql") .option("es.nodes", "localhost") .option("es.port", "9200") .option("es.resource", "index_name/document_type") .save() ``` 这里的`localhost`和`9200`分别是Elasticsearch的主机和端口。`index_name`是要写入的Elasticsearch索引名称,`document_type`是要写入的文档类型。 5. 提交作业并等待执行结果: ```scala spark.stop() // 关闭SparkSession对象 ``` 这一步是为了确保作业提交成功并完成。 通过以上步骤,就可以将Hive查询结果存入Elasticsearch中了。需要注意的是,为了能够使用Elasticsearch-Hadoop库,还需要在构建SparkSession对象时添加相应的依赖。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值