使用python完成Kafka+sparkstreaming+elasticsearch

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

在网上找了很久python的Kafka+sparkstreaming+elasticsearch的代码找不到,基本都是scala或者java的(好像是spark自己本身提供了库给java和scala写入ES?然而并没有可以提供给python的😓),所以自己写了一个,能正常运行,但是感觉这样写不太好,想发出来和大家交流一下。

from elasticsearch import Elasticsearch
from pyspark.streaming import StreamingContext
from pyspark.sql.session import SparkSession
from pyspark.sql import SQLContext
from pyspark.streaming.kafka import KafkaUtils
import os

os.environ['JAVA_HOME'] = "/usr/local/java/bin"
es = Elasticsearch(['Master:9200'])

# 创建传入Es的数据
def create_send_data(lines):

    for rec in lines:
        es_dict = {}
        es_dict['timestamp'] = rec[0:10]
        es_dict['user_id'] = rec[10:14]
        es_dict['lat'] = rec[14:23]
        es_dict['lng'] = rec[23:32]
        es_dict['gps_timestamp'] = rec[32:42]
        es_dict['angle'] = rec[42:45]
        es.index(index="user_point", doc_type="test", body=es_dict)

# 处理从Kafka接收到的数据
def Dstream_opt(ssc):
    topic = "test0210"
    #创建direct连接,指定要连接的topic和broker地址
    ks = KafkaUtils.createDirectStream(ssc,[topic],{"metadata.broker.list":"Master:9092"})

    ks.pprint()

    #以下代码每操作一次,就打印输出一次
    lines = ks.map(lambda x:x[1])
    # lines.pprint()

    return lines


if __name__ == '__main__':
    # 创建SparkContext
    print("========================创建spark=========================")
    spark = SparkSession.builder.master("local[2]").getOrCreate()
    sc = spark.sparkContext
    ssc = StreamingContext(sc, 3)
    sqlContext = SQLContext(sc)
    # 获得接收到的Dstream
    lines = Dstream_opt(ssc)
    lines.pprint()
	
    lines.foreachRDD(lambda rdd: rdd.foreachPartition(create_send_data))

    ssc.start()
    #等待计算结束
    ssc.awaitTermination()

在这里插入图片描述
这套代码提交到spark集群中是可以正常运行的,其实就是将发过来的一串数字,剪切之后再存入ES,登录进Kibana也是可以查到存进去的数据的。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值