栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

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

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

目录

一:sparkSQL介绍

二:Dataframe

三:dataSet

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

五:rdd,dataframe,dataset异同点


一: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 之后可以很自由的获得每一行的信息

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/757833.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号