SparkCore案例一:数据过滤

1. 要求

1. 过去用户的行为日志数据中响应状态码大于等于400的数据
2. 并且需要查看一下合法的数据有多少条,不合法的数据有多少条
3. 将处理完成的结果保存到HDFS分布式文件存储系统上

2. 代码:使用自带累加器

/*
180.153.11.130
-
-
2018-03-18 11:42:44
"POST https://www.taobao.com/category/d HTTP/1.1"
200
12901
https://www.taobao.com/category/b
Google Chrome Chromium/Blinkwindows
山西
37.54
112.33
57
*/
object A1LogFilter {
def main(args: Array[String]): Unit = {
val sparkConf:SparkConf = new SparkConf().setAppName("demo02").setMaster("local[3]")
val sc:SparkContext = new SparkContext(sparkConf)
val rdd = sc.textFile("hdfs://node1:9000/opt/data/a.log")
val accumulator = sc.longAccumulator
val accumulator1 = sc.longAccumulator
val value: RDD[String] = rdd.filter((line: String) => {
val str = line.split(" ")
if (str.length < 15) {
accumulator.add(1L)
false
} else if (str(8).toInt >= 400) {
accumulator1.add(1L)
true
} else {
accumulator.add(1L)
false
}
})
value.saveAsTextFile("hdfs://node1:9000/clean")
println(s"合法 ${accumulator1.value} 不合法 ${accumulator.value}")
sc.stop()
}
}

3. 代码二:使用自定义累加器

  • 主类:
object A1LogFilter {
def main(args: Array[String]): Unit = {
val sparkConf:SparkConf = new SparkConf().setAppName("demo02").setMaster("local[3]")
val sc:SparkContext = new SparkContext(sparkConf)
val rdd = sc.textFile("hdfs://node1:9000/opt/data/a.log")
// val accumulator = sc.longAccumulator
// val accumulator1 = sc.longAccumulator
val accumutor = new A1Accumutor()
val value: RDD[String] = rdd.filter((line: String) => {
val str = line.split(" ")
if (str.length < 15) {
// accumulator.add(1L)
accumutor.add("novalid")
false
} else if (str(8).toInt >= 400) {
// accumulator1.add(1L)
accumutor.add("valid")
true
} else {
accumutor.add("novalid")
// accumulator.add(1L)
false
}
})
value.saveAsTextFile("hdfs://node1:9000/clean")
// println(s"合法 ${accumulator1.value} 不合法 ${accumulator.value}")
println(accumutor.value)
sc.stop()
}
}
  • 自定义累加器:
package sparkcorerddexample
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
/*
1、过滤用户的行为日志数据中响应状态码大于等于400的数据,
2、并且需要查看一下合法的数据多少条,不合法的数据有多少条 ----累加器(自定义累加器?其他累加器? spark自带long类型)
如果使用自带的long类型累加器 需要两个 自定义累加器实现 1个
3、将处理完成的结果保存到HDFS分布书文件存储系统上
180.153.11.130
-
-
2018-03-18 11:42:44
"POST https://www.taobao.com/category/d HTTP/1.1"
200
12901
https://www.taobao.com/category/b
Google Chrome Chromium/Blinkwindows
山西
37.54
112.33
57
*/
object A1LogFilter {
def main(args: Array[String]): Unit = {
val sparkConf:SparkConf = new SparkConf().setAppName("demo02").setMaster("local[3]")
val sc:SparkContext = new SparkContext(sparkConf)
val rdd = sc.textFile("hdfs://node1:9000/opt/data/a.log")
// val accumulator = sc.longAccumulator
// val accumulator1 = sc.longAccumulator
val accumutor = new A1Accumutor()
val value: RDD[String] = rdd.filter((line: String) => {
val str = line.split(" ")
if (str.length < 15) {
// accumulator.add(1L)
accumutor.add("novalid")
false
} else if (str(8).toInt >= 400) {
// accumulator1.add(1L)
accumutor.add("valid")
true
} else {
accumutor.add("novalid")
// accumulator.add(1L)
false
}
})
value.saveAsTextFile("hdfs://node1:9000/clean")
// println(s"合法 ${accumulator1.value} 不合法 ${accumulator.value}")
println(accumutor.value)
sc.stop()
}
}
posted @   jsqup  阅读(121)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示