Spark Streaming 实时数据处理:词频统计与广告点击率计算
两个 Spark Streaming 实时数据处理程序示例
本文将介绍两个使用 Spark Streaming 实现的实时数据处理程序示例,分别为词频统计和广告点击率统计。这两个程序都接收流式数据,并通过 Spark Streaming 进行实时计算,最终输出结果。
1. 实时词频统计程序
题目: 使用 Spark Streaming 实现一个简单的实时词频统计程序。输入数据为一个 DStream,其中每个 RDD 包含多个单词,输出数据为一个 DStream,其中每个 RDD 包含每个单词出现的次数。
答案:
import org.apache.spark.streaming._
import org.apache.spark.streaming.StreamingContext._
import org.apache.spark.SparkConf
object WordCount {
def main(args: Array[String]) {
// 创建 SparkConf 对象
val conf = new SparkConf().setAppName("WordCount").setMaster("local[*]")
// 创建 StreamingContext 对象,每秒钟处理一次数据
val ssc = new StreamingContext(conf, Seconds(1))
// 从 socket 读取数据
val lines = ssc.socketTextStream("localhost", 9999)
// 切分每行数据为单词
val words = lines.flatMap(_.split(" "))
// 统计每个单词的出现次数
val wordCounts = words.map((_, 1)).reduceByKey(_ + _)
// 打印结果
wordCounts.print()
// 启动 StreamingContext
ssc.start()
// 等待 StreamingContext 停止
ssc.awaitTermination()
}
}
2. 实时广告点击率统计程序
题目: 使用 Spark Streaming 实现一个实时的广告点击率统计程序。输入数据为一个 DStream,其中每个 RDD 包含多个广告点击事件,每个事件包含广告 ID 和点击次数,输出数据为一个 DStream,其中每个 RDD 包含每个广告的点击率。
答案:
import org.apache.spark.streaming._
import org.apache.spark.streaming.StreamingContext._
import org.apache.spark.SparkConf
case class AdClick(adId: String, clickCount: Int)
object AdClickRate {
def main(args: Array[String]) {
// 创建 SparkConf 对象
val conf = new SparkConf().setAppName("AdClickRate").setMaster("local[*]")
// 创建 StreamingContext 对象,每秒钟处理一次数据
val ssc = new StreamingContext(conf, Seconds(1))
// 从 socket 读取数据
val lines = ssc.socketTextStream("localhost", 9999)
// 将每行数据转换为 AdClick 对象
val adClicks = lines.map(line => {
val tokens = line.split(",")
AdClick(tokens(0), tokens(1).toInt)
})
// 统计每个广告的总点击次数和总展示次数
val adCounts = adClicks.map(ad => (ad.adId, (ad.clickCount, 1)))
.reduceByKey((x, y) => (x._1 + y._1, x._2 + y._2))
// 计算每个广告的点击率
val adClickRates = adCounts.mapValues(counts => counts._1.toDouble / counts._2.toDouble)
// 打印结果
adClickRates.print()
// 启动 StreamingContext
ssc.start()
// 等待 StreamingContext 停止
ssc.awaitTermination()
}
}
这两个示例展示了如何使用 Spark Streaming 处理流式数据,并进行实时计算。Spark Streaming 提供了丰富的 API,可以方便地实现各种实时数据处理需求。
原文地址: https://www.cveoy.top/t/topic/fVfg 著作权归作者所有。请勿转载和采集!