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()
}
}
本文来自博客园,作者:jsqup,转载请注明原文链接:https://www.cnblogs.com/jsqup/p/16625369.html