对数据进行清洗处理。假如某行数据出现NULL的次数超过3次(包括3次)的数据进行删除
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
val conf = new SparkConf().setMaster("local").setAppName("local")
val sc =new Sparkcontext(conf)
val data =sc.textFile( path= "/root/IdeaProjects/ls/target/hotel_data.csv")
val data1:RoD[string]=data.filter(a => {
//进行清洗,每一行以逗号分割
val strings: Array[string]= a.split( ",")
// 定义一个累加的值 每次foreach 循环执行完 重新回来执行 c 会再次初始化为0
var c=0
// 把一行分割的数据 遍历
strings.foreach(a => {
// 如果数据 == "NULL"
if (a == "NULL"){
c += 1
}
})
// 清洗的时候 如果c的null值大于等于3 则可以打印输出 然后count统计null大于三需要删除的总条目
c >=3
})
println(data1.count())
// 清洗的时候 如果c的null值小于3 则可以打印 否则剔除
c<3
} )
datal.repartition(1).saveAsTextFile(path"")
data1.collect().foreach(println)
统计每个省份的酒店数量
val conf = new SparkConf().setMaster("local").setAppName("local")
val sc = new SparkContext(conf)
val data =sc.textFile( path= "")
val ls =data.map(x=>{
val y =x.split( regex ",");
(y(1),y(3))
})
val ls1=ls.map(x=>(x._2,(x._1,1))).reduceByKey((x,y)=>(x._1+y,_1,x._2+y._2)).map(x=>(x._1,x._2._2))
ls1.foreach(println)
ls1.repartition( 1).saveAsTextFile( path= "")
ls1.collect(). foreach(println)
统计每个星级的数量,假如星级的数据没有出现几星级的字眼,那么就归类到其他。
val conf = new SparkConf().setMaster("local").setAppName("local")
val sc = new SparkContext(conf)
val data = sc.textFile( path= "")
val data1 = data.map(x => {
val y=x.split( regex=",")
if(y(6).contains("五星")){
("五星级",1)
} else if
(y(6).contains("四星")){
("四星级",1)
} else if
(y(6).contains("三星")){
("三星级",1)
} else if
(y(6).contains("二星")){
(“二星级”,1)
} else {
("其它",1)
}})
val counts=data1.reduceByKey((x,y)=>x+y)
counts.foreach(println)
data1.repartition( 1).saveAsTextFile("")
统计每个省份的平均酒店实住间夜率。平均酒店实住间夜率=酒店实住间夜的总数/酒店总间夜的总数。
val conf = new SparkConf().setMaster("local").setAppName("local")
val sc = new SparkContext(conf)
val data= sc.textFile()
val datal=data.filter(x=>(!x.contains("SEQ")))map(x=>{
val data2=x.split( regex="")
(data2(3) data2(14),toFloat data2(16).toFloat)
})
val data3=data1.map(x=>(x._1,(x._2,x._3))).reduceByKey((x,y)=>(x._1+y._1,x._2+y._2)).map(x=>(x.1,(x.2._2/x._2.1)))
data3.foreach(x=>println(x))
data3.repartition( 1).saveAsTextFile()
}}
统计出酒店直销拒单最高的省份
val conf = new SparkConf().setMaster("local").setAppName("local")
val sc = new SparkContext(conf)
val data00=data.mapPartitionsWithIndex((x,y)=>{
if(x==0)y.drop(1)
y
})
val data1=data00.map(x=>{
val y=x.split( regex="")(y(3) y(21).toInt)
})
val data2=data1.map(x=>(x._1,(x._2,1))).reduceByKey((x,y)=>(x. 1+y. 1,x._2+y._2)).map(x=>(x,_1,x._2._1)).sortBy(x=>x._2, false).take( 1)
data2.foreach(x=>println(x))
val data3=sc.parallelize(data2)
data3.saveAsTextFile("")
}}
统计每个城市的酒店直销成功率。酒店直销成功率=(酒店直销实住订单的总数+酒店直销实住间夜的总数)/(酒店直销订单的总数+酒店直销间夜总数)。
val conf = new SparkConf().setMaster("local").setAppName("local")
val sc = new SparkContext(conf)
val data = sc.textFile()
val datal=data.filter(x=>(!x.contains("SEQ")))map(x=>{
val data2=x.split( regex=" ")
(data2(4),data2(15) toFloat,data2(20).toFloat,data2(17).toFloat,data2(18).toFloat)
})
val data3=data1.map(x=>(x._1,(x._2+x._3,x._4+x,_5))).reduceByKey((x,y)=>(x._1+y,_1,x._2+y._2)).map(x=>(x._1,(x._2._1/x._2._2)))
data3.foreach(x=>println(x))
data3.repartition( 1).saveAsTextFile("")
}
}