Spark的认识(三)

Spark的认识(三)

1、本文内容

  • 1、掌握sparkSQL原理

  • 2、掌握DataFrame和DataSet数据结构和使用方式

  • 3、掌握sparksql代码开发

2、sparksql概述

2.1 sparksql前世今生

  • shark是专门为spark设计的大数据仓库系统

  • shark与hive代码兼容,同时它也依赖于spark的版本

  • 后期由于hive的代码升级,spark的版本不断变化。

  • hive的mapreduce处理思想限制了shark的性能

  • 后面慢慢把shark这个框架废弃了。把重点转移到sparksql上面

2.2 sparksql 是什么

  • Spark SQL is Apache Spark's module for working with structured data.

  • Sparksql是spark用来处理结构化数据的一个模块。它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。

3、sparksql特性

  • 1、易整合

    • 将sql与spark应用程序混合使用,同时使用java、scala、python、R等不同的语言api去操作

  • 2、统一的数据源访问

    • sparksql可以以一种相同的方式来访问任意的外部数据源

    • SparkSession.read.文件格式("该格式的文件路径")

  • 3、兼容hive

    • 可以通过sparksql去操作hivesql

  • 4、支持标准的数据库连接

    • 可以通过jdbc或者是odbc来操作数据库表中的数据

4、DataFrame

4.1 DataFrame是什么

DataFrame它的前身是schemaRDD,它是在spark1.3.0之后把schemaRDD改名为DataFrame,
schemaRDD是直接继承自RDD,而DataFrame自己实现了RDD中的一些方法,你可以使用dataFrame调用rdd方法转换成一个RDD.
​
在Spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库的二维表格,DataFrame带有Schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型,但底层做了更多的优化
​

4.2 RDD与DataFrame区别

DataFrame比RDD多了对结构化数据的描述信息,就是schema元信息

4.3 RDD与DataFrame优缺点

  • 1、RDD

    • 优点

      • 1、编译时类型安全

        • 编译时类型检查,就是看一下当前的数据类型是不是我们程序需要的数据类型

      • 2、具有面向对象编程的特性

        • 可以使用面向对象编程来操作rdd

    • 缺点

      • 1、序列化和反序列化性能开销很大

        • 在进行分布式计算的时候,会涉及到数据大量的网络传输

        • RDD会把数据本身和数据结构信息首先都会进行序列化,然后在进行反序列化获取对象

      • 2、频繁创建大量的对象会带来GC(垃圾回收)

  • 2、DataFrame

    • DataFrame引入了schema和off-heap

    • 优点

      • 1、由于DataFrame引入了schema,解决了RDD中序列化和反序列性能开销很多这个缺点

        • 后期再进行数据传输的时候,只需要序列化和反序列化数据内容本身就可以了,对于数据结构信息也就是schema可以省略掉。

      • 2、由于DataFrame引入了off-heap(对象的创建不在jvm堆以内,直接使用操作系统层面上的内存),解决了RDD频繁创建大量的对象会带来GC(垃圾回收)这个缺点。

    • 缺点

      • DataFrame引入了schema和off-heap分别解决了RDD的2个缺点,同时它也丢失rdd的优点

        • 1、编译时类型不安全

        • 2、不具有面向对象编程的特性

 

5、读取数据源创建DataFrame

5.1 读取文本文件创建DataFrame

//读取文本文件创建DataFrame
val df1=spark.read.text("/person.txt") 
//打印schema
df1.printSchema
//展示数据
df1.show

5.2 读取json文件创建DataFrame

//读取json文件创建DataFrame
val df2=spark.read.json("/people.json")
//打印schema
df2.printSchema
//展示数据
df2.show

5.3 读取parquet列存储的文件创建DataFrame

//读取parquet文件创建DataFrame
val df3=spark.read.parquet("/users.parquet")
//打印schema
df3.printSchema
//展示数据
df3.show

 

6、DataFrame常用操作

6.1 DSL风格语法

  • 就是dataFrama自己封装了一套api,可以通过这套api来操作dataFrame

val rdd1=sc.tex
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值