spark实战项目之一,构造kafka数据源

该项目旨在通过Spark实现一个在线推荐算法,数据来源于构造的Kafka数据沙盒。首先介绍了项目背景,强调了通过模拟数据而非官方示例来提升实践性。接着详细描述了构造产品集合的过程,特别是如何使用Python和Kafka创建消费者和生产者。生产者不仅接收消息,还需要模拟用户行为并生成商品列表,这些列表作为推荐算法的输入,并将推荐结果回推到Kafka。最后提到了Python中异步socket的使用,并记录了启动消费者和生产者的步骤。

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

项目背景

目的是熟悉spark的使用和编程套路
官方demo是要看的,但毕竟是demo,离工程实际太远
考虑后,决定构造一个数据沙盒,然后在用spark在这个数据沙盒内实现一个在线推荐算法
算法调通后,可以在其他数据集上去尝试效果

数据沙盒,是指规划的这个在线推荐算法,接受的所有数据源,包括用户反馈都是程序构造的,算法要解决的实际问题并不是一般的提升转化率或利润率,而是挑战测试数据的输入方。

这种算法在真实的企业里应该效果不好,但作为编程练习还是很够难度的。
作为不太准确的类比,在训练人工智能下围棋,打星际,打王者荣耀时,一个重要手段是让AI程序之间自身对战,每天对局次数可以达到人类上百年,毕竟程序的运行效率比真人快太多

构造产品集合

算法从可用数据开始考虑,虽然所有数据都可以构造,但也分难易先后
第一波我选择构造浏览数据,
数据格式本身简单,就是一批数字作为商品id,每个id带1-3个数量不等的标签id
略有难度的是浏览数据如何输入给spark

spark内有多个数据加载方式,例如通过textfile读本地硬盘文件,textfilestream监视hdfs路径,sockectstream从外部服务读,从kafka订阅

显然最接近工程实际的是从kafka订阅

语言选择python这个老朋友,访问python的库来自pip的confluent_kafka
先搞一个简单的消费者,官方例子就差不多,只收消息不处理

from confluent_kafka import Consumer, KafkaError

c = Consumer ( {
    \
    'bootstrap.servers':'localhost:9092', \
    'group.id':'NullDumper'\
    })
c.subscribe (['AccessLog'])

msgCount = 0
while True:
    msg = c.poll (1.0)
    if msg is None:
        continue
    if msg.error ():
        print ("Consumer error: {}".format (msg.error ()))
        continue
    msgCount += 1
    if msgCount % 100 == 0 :
        print ('Received {} messages\n{}'.format (msgCount,msg))
c.close ()

再弄个生产者,这就比消费者要复杂多了,
因为还要有个模拟用户行为的对手方,这个生产者承担的实际是个要写日志的API服务
自己要监听端口提供,根据访问请求来返回一定数量的商品列表
返回的商品列表要写入kafka作为推荐算法的数据源
推荐算法的推荐结果也要从这里推出给对手方
python里的异步socket有好久没用了,一天才撸完一个粗略框架
先记录一下

import csv
import random
import sys

import socket
import selectors
from confluent_kafka import Producer

sel 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值