Spark:SQL(二)

目录

01:上篇回顾

02:课程目标

03:数据源Sink:设计

04:集成Hive:场景及设计

05:集成Hive:SparkShell测试

06:集成Hive:IDEA测试

07:自定义UDF规则

08:自定义UDF测试

09:SparkSQL开发方式

10:SparkSQL开发方式:SQL Shell

11:SparkSQL开发方式:Beeline

12:SparkSQL开发方式:JDBC

13:Catalyst 优化器

14:实时数据计算场景及架构

15:Spark Streaming的功能及特点

16:官方案例Wordcount

17:驱动接口及数据抽象设计

18:自定义开发WordCount

附录一:Maven依赖


01:上篇回顾

https://blog.csdn.net/m0_57498038/article/details/119112063

  1. RDD、DF、DS之间的区别是什么?

    • RDD:分布式数据集合:数据 + 支持泛型

    • DataFrame:分布式数据表:数据 + Schema + 不支持泛型【Row】

    • DataSet:分布式数据表:数据 + Schema + 支持泛型

  2. 怎么实现三者之间的互相转换?

    • DF 、 DS =》 RDD:.rdd

    • RDD =》 DF、DS

      • 方式一:反射:将没有Schema的RDD类型转换有Schema的RDD类型

        • RDD【String】 =》 RDD【CaseClass】

      • 方式二:自定义Schema

        • RDD【Row】 + Schema【StructType【StructFields】】 = DataFrame

    • DF => DS :df.as【CaseClass】

    • DS => DF:toDF(colName)

  3. SaveMode是什么?

    • 保存模式

      • Append:追加

      • Overwrite:覆盖

      • ErrorIfExists:默认,如果存在就报错

      • Ignore:如果存在就忽略

    • csv:文本文件

    • jdbc:问题:主键 + 约束导致如果用追加:主键重复,如果用覆盖,数据丢失

      ds.write.mode.option.jdbc
      • 解决

        • 如果用官方的JDBC:1-建MySQL表时,允许主键自动更新 2-使用追加模式

        • 如果不用官方的JDBC:自己写

          ds.foreachPartition(part => {
              //JDBC
              //replace into 
          })
  4. 如何调整SparkSQL 的聚合Shuffle中的分区个数?

    • 默认分区:200个

    • 修改属性:spark.sql.shuffle.partitions

  5. SparkSQL有哪些常用的数据源接口?

    • Source接口

    • 调用:spark.read.format(“格式”).load(“路径”)

      spark.read.csv/partquet/orc/json/jdbc/table

02:课程目标

  1. SparkSQL与Hive集成

    • SparkSQL为什么要访问Hive,集成基本原理?

    • Spark SQL 集成 Hive 与 Hive on Spark 有什么区别?

    • SparkSQL集成Hive怎么进行开发?

  2. SparkSQL开发方式

    • IDEA + JAR

    • Shell

    • Beeline

    • SQL脚本

    • JDBC

  3. SparkStreaming入门

    • 实时计算的需求以及场景?

    • SparkStreaming的基本设计:驱动接口【StreamingContext】和数据抽象【DStream】

    • 自定义开发一个SparkStreaming程序:Wordcount

03:数据源Sink:设计

  • 目标了解SparkSQL中Sink数据源的设计

  • 实施

    • 设计:非常类似于MR的设计

      • MR的设计

        • 输出:OutputFormat

          • TextOutputFormat:将结果保存为文件

          • DBOutputFormat:将结果保存到MySQL

      • SparkSQL的设计

        • 输出:DataFrameWriter

          • .csv

          • .jdbc

          • .parquet

          • .json

          • ……

    • 语法

      //保存方式一:redis、hbase、JDBC
      df/ds.foreachPartition(自定义保存的逻辑)
      ​
      //保存方式二
      df/ds.write.mode.jdbc => df/ds.write.mode.format("输出的格式").save("路径")
      ​
      //保存方式三
      df/ds
        .write
        .mode(SaveMode.Overwrite)
        .format("指定保存格式")
        .save("保存的路径")/save()/saveAsTable
      • save(Path:String):用于保存文本

      • save():用于保存数据库

      • saveAsTable:保存到Hive表中

  • 小结

    • 了解SparkSQL中Sink数据源的设计

04:集成Hive:场景及设计

  • 目标掌握SparkSQL集成Hive的场景及设计

  • 实施

    • 场景

      • 离线:对数据仓库中的数据进行分布式计算分析处理

        • 数据来源:Hive

      • 实时:对结构化数据进行分布式实时计算

        • 数据来源:Kafka

      • 利用SparkSQL对Hive数据仓库中的数据进行处理分析

    • 设计

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值