头歌-企业Spark案例--酒店数据分析实战

第1关 数据清洗–过滤字段长度不足的且将出生日期转换成指定格式

package com.yy


import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, Dataset, SparkSession}

object edu{
    /**********Begin**********/
    // 此处可填写相关代码
    case class Person(id:String,Name:String,CtfTp:String,CtfId:String,Gender:String,Birthday:String,Address:String,Zip:String,Duty:String,Mobile:String,Tel:String,Fax:String,EMail:String,Nation:String,Taste:String,Education:String,Company:String,Family:String,Version:String,Hotel:String,Grade:String,Duration:String,City:String)
    /**********End**********/
    def main(args: Array[String]): Unit = {
        val spark = SparkSession
        .builder()
        .appName("Spark SQL")
        .master("local")
        .config("spark.some.config.option", "some-value")
        .getOrCreate()
        val rdd = spark.sparkContext.textFile("file:///root/files/part-00000-4ead9570-10e5-44dc-80ad-860cb072a9ff-c000.csv")
        /**********Begin**********/
        // 清洗脏数据(字段长度不足 23 的数据视为脏数据)
        val rdd1: RDD[String] = rdd.filter(x=>{
        val e=x.split(",",-1)
        e.length==23  })
        // 将出生日期改为 xxxx-xx-xx 格式(例如 19000101:1900-01-01,如果该属性为空不做处理,结果只取前 10 行)
        val rdd2: RDD[Person] = rdd1.map(x=>{val str=x.split(",",-1)
            if (str(5).trim != "" && str(5).length == 8) {
                str(5) = str(5).substring(0,4)+"-"+str(5).substring(4,6)+"-"+str(5).substring(6,8)
            }
            Person(str(0),str(1),str(2),str(3),str(4),str(5),str(6),str(7),str(8),str(9),str(10),str(11),str(12),str(13),str(14),str(15),str(16),str(17),str(18),str(19),str(20),str(21),str(22))
        })
        import spark.implicits._
        val df =rdd2.toDS()
        df.createOrReplaceTempView("yy")
        val out= spark.sql("select * from yy limit 10")
        // 将结果保存成 csv 格式到 file:///root/files-out 目录下
        out.write.csv("file:///root/files-out")
        /**********End**********/
        spark.stop()
      }
}

第2关 数据分析–通过入住时间和入住总时长计算用户离开时间

package com.yy


import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, Dataset, SparkSession}

object edu1{
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder()
      .appName("Spark SQL")
      .master("local")
      .config("spark.some.config.option", "some-value")
      .getOrCreate()
          /**********Begin**********/
          //加载第一关处理后的数据,数据位于/root/files2目录下,文件名为part-00000-f9f4bd23-1776-4f84-9a39-f83840fa1973-c000.csv
    val df = spark.read.option("header", true).csv("file:///root/files2/part-00000-f9f4bd23-1776-4f84-9a39-f83840fa1973-c000.csv")
    //通过入住时间和入住总时长计算用户离开时间(入住时间或者入住总时长为空的不做计算)
    df.createOrReplaceTempView("yy")
    val df2: DataFrame =spark.sql("select Name,from_unixtime(unix_timestamp(Version)+Duration*3600,'yyyy-MM-dd HH:mm:ss') from yy where Version  != '' and Duration != '' limit 10")
    //将结果保存成csv格式到file:///root/files-out1目录下
    df2.write.csv("file:///root/files-out1")
       /**********End**********/ 
    spark.stop()
  }
}

第3关 数据分析–酒店被入住次数最多的3家和他们的平均得分以及所在城市

package com.yy


import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, Dataset, SparkSession}

object edu2{
  def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder()
      .appName("Spark SQL")
      .master("local")
      .config("spark.some.config.option", "some-value")
      .getOrCreate()
         /**********Begin**********/
   //加载第一关处理后的数据,数据位于/root/files3目录下,文件名为part-00000-f9f4bd23-1776-4f84-9a39-f83840fa1973-c000.csv
  val df = spark.read.option("header", true).csv("file:///root/files3/part-00000-f9f4bd23-1776-4f84-9a39-f83840fa1973-c000.csv")
    //酒店被入住次数最多的10家和他们的平均得分以及所在城市(评分为空的不做计算,注意考虑连锁酒店的情况,即同一家酒店开设在不同的城市) 
    df.createOrReplaceTempView("yy")
    val df2: DataFrame =spark.sql("select City,Hotel,avg from (select count(Hotel)as num ,Hotel,City ,round(avg(Grade),2) as avg from yy  where Grade != '' group by Hotel,City ) aa order by num desc limit 3")      
   //将结果保存成csv格式到file:///root/files-out2目录下
   df2.write.csv("file:///root/files-out2")
     /**********End**********/ 
    spark.stop()
  }
}

第4关 数据分析–每个用户每年去酒店次数及入住总时长

package com.yy


import org.apache.spark.rdd.RDD
import org.apache.spark.sql.{DataFrame, Dataset, SparkSession}

object edu3{
    def main(args: Array[String]): Unit = {
    val spark = SparkSession
      .builder()
      .appName("Spark SQL")
      .master("local")
      .config("spark.some.config.option", "some-value")
      .getOrCreate()
          /**********Begin**********/
    //加载第一关处理后的数据,数据位于/root/files4目录下,文件名为part-00000-f9f4bd23-1776-4f84-9a39-f83840fa1973-c000.csv
     val df = spark.read.option("header", true).csv("file:///root/files4/part-00000-f9f4bd23-1776-4f84-9a39-f83840fa1973-c000.csv")
    //每个用户每年去酒店次数及入住总时长
    df.createOrReplaceTempView("yy")
    val df2: DataFrame =spark.sql("  select Name ,count(Id),sum(Duration),time from ( select Name ,Id,Duration,year(Version) as time  from yy where Version != '' ) a group by time,Name limit 10")  
    //将结果保存成csv格式到file:///root/files-out3目录下
    df2.write.csv("file:///root/files-out3")
       /**********End**********/
    spark.stop()
  }
}
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用\[1\]:在过去的两个月里,Databricks公司举办了一场会议,将数据团队聚集在一起,共召开220多个会议,有无数机会与同行交流——超过50,000名数据科学家、数据工程师、分析师、商业领袖和其他数据专业人士。 Spark + AI 峰会虚拟环境。 引用\[2\]:本书以数据智能为灵魂,以Spark 2.4.X版本为载体,以Spark+ AI商业案例实战和生产环境下几乎所有类型的性能调优为核心,对企业生产环境下的Spark+AI商业案例与性能调优抽丝剥茧地进行剖析。全书共分4篇,内核解密篇基于Spark源码,从一个实战案例入手,循序渐进地全面解析Spark 2.4.X版本的新特性及Spark内核源码;商业案例篇选取Spark开发中最具代表性的经典学习案例,在案例中综合介绍Spark的大数据技术;性能调优篇覆盖Spark在生产环境下的所有调优技术; Spark+ AI内幕解密篇讲解深度学习动手实践,通过整合Spark、PyTorch以及TensorFlow揭秘Spark上的深度学习内幕。本书适合所有大数据和人工智能学习者及从业人员使用。对于有丰富大数据和AI应用经验的人员,本书也可以作为大数据和AI高手修炼的参考用书。同时,本书也特别适合作为高等院校的大数据和人工智能教材。 问题:spark数据分析实战——奥运会 回答: Spark是一个强大的大数据处理框架,可以用于数据分析和处理。在奥运会数据分析实战中,Spark可以帮助我们处理大规模的奥运会数据,进行数据清洗、转换和分析。通过使用Spark的分布式计算能力和优化技术,我们可以高效地处理大量的奥运会数据,并从中提取有价值的信息。同时,Spark还提供了丰富的数据处理和机器学习库,可以帮助我们进行数据挖掘和建模,以便更好地理解和预测奥运会的趋势和结果。通过结合Spark和AI技术,我们可以实现更深入的奥运会数据分析,并为奥运会的组织者、运动员和观众提供更好的决策支持和用户体验。 #### 引用[.reference_title] - *1* *2* [免费参加全球最大的Spark+AI峰会(Databricks 2020年6月22-26日)!免费访问峰会主题演讲及分组会议!](https://blog.csdn.net/duan_zhihua/article/details/106729096)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [热烈祝贺王家林大咖大数据经典传奇著作《Spark大数据商业实战三部曲》 畅销书籍第二版 清华大学出版社发行...](https://blog.csdn.net/duan_zhihua/article/details/106294896)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值