大数据--spark生态4--sparkSQL

目录

一:sparkSQL介绍

二:DataFrame

三:dataSet

四:rdd,dataframe,dataset之间的转换

五:rdd,dataframe,dataset异同点

5.1 相同点

5.2 区别

六:DataFrame的常用操作


一:sparkSQL介绍

sparkSQL不但兼容hive,还可以从rdd,parquet文件,json文件中获取数据。

二:DataFrame

  • dataframe是一种以rdd为基础的分布式数据集,类似于传统数据库中的二维表格。dataframe与rdd的主要区别在于,dataframe带有schema元信息,即dataframe所表示的二维表数据集的每一列都带有名称和类型。
  • dataframe也支持嵌套数据类型(struct, array, map)。
  • dataframe提供一个特定领域语言(domain-specific language, dsl)去管理结构化的数据。
val df = spark.read.json("data/user.json")

df.printSchema

df.filter($"age" > 30).show

三:dataSet

        dataset是分布式数据集合,是dataframe的一个扩展。dataset是强类型的,比如可以有dataset[car], dataset[person]。dataframe是dataset的特例,datasetframe = dataset[row].

1)使用样例类序列创建dataset
case class person(name:string, age:long)

defined class person

val caseclassds = seq(person("zhangsan",2)).toDS()

caseclassDS.show

四:rdd,dataframe,dataset之间的转换

1) dataframe转换为dataset

        val ds = df.as[user]

2) dataset转换为 dataframe

        val df = ds.toDF

3) dataset转换为rdd

        val rdd = ds.rdd

4) rdd转换为dataset

        sparksq能够自动将包含有case类的rdd转换为dataset.

5) rdd转换为dataframe

        rdd.toDF

6) dataframe转换为rdd

        val rdd = df.rdd

五:rdd,dataframe,dataset异同点

5.1 相同点

  • 都是spark平台下的分布式弹性数据集。
  • 都有惰性机制,在进行创建,转换,如map方法的时候,不会立即执行,只有在遇到action的时候,才会执行。
  • 三者都有许多共同的函数,如filter,排序等。
  • 三者都会根据spark的内存情况自动缓存运算,这样即使数据量很大,也不用担心内存会溢出。
  • 三者都有partition的概念
  • dataset和dataframe均可以使用模式匹配获取各个字段的值和类型。

5.2 区别

1) rdd

  • rdd一般和spark millib同时使用
  • rdd不支持sparksql

2) dataframe

  • dataframe每一行的类型固定为row,每一列的值没法直接访问,只有通过解析才能获取各个字段
  • dataframe与dataset均支持sparkSQL的操作

3) dataset

  • dataset和dataframe有完全相同的成员函数区别只是每一行的数据类型不同
  • DataFrame也可以叫Dataset[Row],每一行的类型是Row,不解析,每一行究竟有哪 些字段,各个字段又是什么类型都无从得知,只能用上面提到的 getAS 方法或者共 性中的第七条提到的模式匹配拿出特定字段。而 Dataset 中,每一行是什么类型是不一定的,在自定义了 case class 之后可以很自由的获得每一行的信息

六:DataFrame的常用操作

  • printSchema

        打印出DataFrame的模式信息

  • select

        从DataFrame中选取部分列的数据

  • filter

        实现条件查询

  • groupBy

        对记录进行分组

  • sort

        对记录进行排序

你可能感兴趣的:(大数据,#,spark生态,flink生态,spark,big,data,hadoop)