【spark对数据进行清理】

对数据进行清洗处理。假如某行数据出现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("")
}
}

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值