spark 通过df进行sql处理

object DataOperation {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().master("local").appName("data-operation").getOrCreate()

    //1.读取json进行sql处理
//    jsonFile(spark)

    //2.读取text进行sql处理
    textFile(spark)
    //3. 案例一
//    movieFile(spark)
    spark.close()
  }

  def movieFile(spark: SparkSession): Unit = {
    val parquetFile = "D:\\大数据课件\\在线计算\\spark文档\\spark课件\\sql\\data\\movies\\movies.parquet"
    val moviesDF = spark.read.parquet(parquetFile)
    moviesDF.createOrReplaceTempView("movies")
    //Jolie导演在2009年之后拍的电影
//    spark.sql("select * from movies where actor_name like '%Jolie%' and produced_year > 2009").show()
    //每个导演拍过几部电影,电影数量大于30,降序排列
//    spark.sql("select actor_name, count(*) as count from movies group by actor_name having count>30 order by count desc").show()

    //每年上映的电影数量,降序排序
//    spark.sql("""select produced_year, count(*) as count
//    from (select distinct movie_title, produced_year from movies)
//    group by produced_year order by count desc""").show(5)

    //生成全局表
    moviesDF.createOrReplaceGlobalTempView("movies_g")
    spark.sql("select count(*) as total from global_temp.movies_g").show()
  }

  def textFile(spark: SparkSession): Unit = {
    val file = "D:\\大数据课件\\在线计算\\spark文档\\spark课件\\sql\\data\\people.txt"
    implicit val personEncoder: Encoder[Person] = ExpressionEncoder()
    val df = spark.read.text(file)
      .map(row => {
      val arr = row.getString(0).split(" ")
      Person(arr(0), arr(1).toInt)
    })/*.toDF()*/

//    val rdd = spark.sparkContext.textFile(file)
//    import spark.implicits._
//    val rdd1 = rdd.map(line => Person(line.split(" ")(0), line.split(" ")(1).toInt))
//    val df = rdd1.toDF()
   val df = spark.createDataFrame(rdd1)
//
    df.createOrReplaceTempView("people")
    val df1 = spark.sql("select name,age from people where age > 20 limit 1")
    df1.show()
    //查看sparksql内存中有哪些表
    spark.catalog.listTables().show()
  }

  def jsonFile(spark: SparkSession): Unit ={
    val file = "D:\\大数据课件\\在线计算\\spark文档\\spark课件\\sql\\data\\people.json"
    val df = spark.read.json(file)
    //    val ds = df.as[Person]
    //生成临时表:内存
    df.createOrReplaceTempView("person")

    val df1 = spark.sql("select * from person where age is not null")
    df1.show()
    val df2 = spark.sql("select name,age from person where age is not null order by age desc limit 1")
    df2.show
  }

}

case class Person(name:String, age:Int)

  • 0
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

1 引言 4 1.1 课程设计目标 4 1.2 编程工具(编程环境)介绍 4 1.3 实施时间及主要实施步骤 4 2 需求分析 5 3 系统总体设计 6 4 数据库设计 6 5 主要功能模块的设计与实现 10 5.1 功能模块1详细设计(综合查询员工信息)..........................................................10 5.1.1 详细设计.......................................................................................................10 5.1.2 算法流程........................................................................................................15 5.1.3 界面设计及测试结果.....................................................................................15 6 调试分析 15 7 用户手册 16 8 测试结果 17 8.1 员工信息的添加...................................................................................................17 8.2 员工信息的修改...................................................................................................17 8.3 员工信息的删除...................................................................................................18 8.4 员工信息的综合查询...........................................................................................18 8.5 员工信息按性别统计的结果................................................................................19 8.6 员工信息按状态统计的结果...............................................................................19 8.7 员工信息按职称统计的结果................................................................................20 9 结论 20 10 参考文献 20
©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值