使用PySpark将kafka数据写入ElasticSearch

使用PySpark将kafka数据写入ElasticSearch

ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

  本文并不打算介绍ElasticSearch的概念,安装部署等知识,而是直接介绍如何使用Apache Spark将数据写入到ElasticSearch中。本文使用的是类库是elasticsearch-hadoop/elasticsearch-spark

版本:

Spark:2.2.0

ElasticSearch:5.6.1

之前写过一篇通过sc.newAPIHadoopRDD方式pyspark读取es的数据,大家有兴趣可以看下:https://blog.csdn.net/qq_37050993/article/details/83339610

今天主要是通过org.elasticsearch.spark.sql方式写入和读取es数据

read_es:

spark=SparkSession.builder.appName("es-spark").getOrCreate()
query = """
    {   
     "query": {
        "match": {
          "sum_rec":"xxx"
        }
      }
    }"""
spark.read \
    .format("org.elasticsearch.spark.sql") \
    .option("es.nodes", "ip") \
    .option("es.resource", "indexName/typeName") \
    .option("es.input.json","yes") \
    .option("es.index.read.missing.as.empty","true") \
    .option("es.query",query) \
    .load().registerTempTable("temp")
spark.sql("select * from temp").show(truncate=False)

write-es

spark=SparkSession.builder.appName("es-spark").getOrCreate()
spark.read.option('header','true').csv('/tmp/sum_rec.csv').registerTempTable("temp")
df=spark.sql("select sum_rec,to_unix_timestamp(WinstartTime, 'yyyy-MM-dd') as WinstartTime,"
             "current_timestamp as nowTime from temp where sum_rec is not null and WinstartTime is not null")
df.write \
    .format("org.elasticsearch.spark.sql") \
    .option("es.nodes", "ip") \
    .option("es.resource", "newindex/newtype") \
    .option("es.mapping.id", "sum_rec") \
    .option("es.mapping.version.type", "external_gte") \
    .option("es.mapping.version", "WinstartTime") \
    .mode('append') \
    .save()

 

你可能感兴趣的:(使用PySpark将kafka数据写入ElasticSearch)