使用Spark Streaming对接kafka之后进行计算

本文介绍了如何使用Spark Streaming从Kafka中读取数据,对数据进行预处理,然后根据数据ID进行分区并写入到Kafka。接着,通过Spark Streaming对接Kafka,将数据计算后存入MySQL的三个不同表中,包括筛选特定会员等级的数据、统计点赞数超过10的评论以及计算指定日期的评论数量。

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

以下是RNG S8 8强赛失败后,官微发表道歉微博下一级评论
数据说明:
rng_comment.txt文件中的数据

rng_comment.txt(数据太大只能上传到百度云):
链接: https://pan.baidu.com/s/164mBxiccbkLdFHF5BcSjww 提取码: vykt
在这里插入图片描述

1、在kafak中创建rng_comment主题,设置2个分区2个副本

/export/servers/kafka_2.11-1.0.0/bin/kafka-topics.sh --create --zookeeper hadoop01:2181 --replication-factor 2 --partitions 2 --topic rng_comment

1.2、数据预处理,把空行过滤掉

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD
object day2 {
//1.2、数据预处理,把空行过滤掉
def main(args: Array[String]): Unit = {
val sparkConf: SparkConf = new SparkConf().setMaster(“local[*]”).setAppName(“day2”)
val sc = new SparkContext(sparkConf)
sc.setLogLevel(“WARN”)
val fileRDD: RDD[String] = sc.textFile(“F:\第四学期的大数据资料\day02四月份资料\第二周\day03\4.14号练习题\rng_comment.txt”)
fileRDD.filter { x => var datas = x.split("\t"); datas.length == 11 }.coalesce(1)
.saveAsTextFile(“F:\第四学期的大数据资料\day02四月份资料\第二周\day03\4.14号练习题\output20200414”)
sc.stop()
}
}

1.3、请把给出的文件写入到kafka中,根据数据id进行分区,id为奇数的发送到一个分区中,偶数的发送到另一个分区

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import java.io.*;
import java.util.Properties;
public class Producer03 {
   
   
    public static void main(String[] args) throws IOException {
   
   
        //配置 kafka 集群
        Properties props = new Properties();
        props.put("bootstrap.servers", "hadoop01:9092,hadoop02:9092,hadoop03:9092");
        props.put("acks", "all");
        props.put("retries", 1);
        props.put("batch.size", 16384);
        props.put("linger.ms", 1);
        props.put("buffer.memory", 33554432);
        // kafka 数据中 key-value 的序列化
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        KafkaProducer<String, String> kafkaProducer = new KafkaProducer<>(props);
        File file = new File("F:\\第四学期的大数据资料\\day02四月份资料\\第二周\\day03\\4.14号练习题\\output20200414\\part-00000");
        BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
        String line = null;
        int partition = 0;
        while ((line = bufferedReader.readLine()) != null) {
   
   
            try {
   
   
                if (Integer.parseInt(line.split("\t")[0]) % 2 == 0) {
   
   
                    partition = 0;
                } else {
   
   
                    partition = 1;
                }
            } catch (NumberFormatException e) {
   
   
                continue;
            }
            kafkaProducer.send(new ProducerRecord<String, String>("rng_comment", partition, String.valueOf(partition), line));
        }
        bufferedReader.close();
        kafkaProducer.close();
    }
}

1.4、使用Spark Streaming对接kafka之后进行计算
在mysql中创建一个数据库rng_comment
在数据库rng_comment创建vip_rank表,字段为数据的所有字段
在数据库rng_comment创建like_status表,字段为数据的所有字段
在数据库rng_comment创建count_conmment表,字段为 时间,条数
1.5.1、查询出微博会员等级为5的用户,并把这些数据写入到mysql数据库中的vip_rank表中
1.5.2、查询出评论赞的个数在10个以上的数据,并写入到mysql数据库中的like_status表中
1.5.3、分别计算出2018/10/20 ,2018/10/21,2018/10/22,2018/10/23这四天每一天的评论数是多少,并写入到mysql数据库中的count_conmment表中

import java.sql.{
   
   Connection, DriverManager, PreparedStatement}
import java.text.SimpleDateFormat
import org.apache.kafka.clients.consumer.ConsumerRecord
import org.apache.kafka.common.serialization.StringDeserializer
import org.apache.spark.{
   
   SparkConf, SparkContext}
import org.apache.spark.rdd.RDD
import org.apache.spark.streaming.{
   
   Seconds, StreamingContext}
import org.apache.spark.streaming.dstream.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值