Spark中RDD、DataFrame和DataSet三者的区别

1.共性:

1.RDD、 DataFrame、DataSet都是spark平台下的分布式数据集,为处理超大型数据提供便利;
2.三者都有惰性机制,在进行创建、转换时,不会立即执行,只有在遇到行动算子的时候才会开始计算;
3.在对DataFrame和DataSet进行操作时,许多操作都需要导入:import spark.implicits._ 包;

4.三者都会根据Spark的内存情况进行自动缓存计算,这样即使数据量很大,也不会担心内存溢出;

2.区别:

1.RDD

1.RDD 一般和spark mllib(后面解释)同时使用
2.RDD不支持sparksql操作

2.DataFrame

1.DataFrame每一行的类型固定为Row,每一列的值无法直接访问,只有通过解析才能获取各个字段的值;
2.DataFrame和DataSet一般不与spark mllib同时使用
3.DataFrame和DataSet均支持sparksql操作

3.DataSet

1.DataFrame和DataSet拥有完全相同的成员函数,区别只是每一行的数据类型不同,DataFrame其实就是DataSet的一个特例,type DataFrame = DataSet[Row]
2.DataFrame也可以叫DataSet[Row],每一行的类型为Row,每一行究竟有哪些字段,各个字段的类型是什么无从得知;而DataSet每一行是什么类型是不一定的,自定义case class之后可以很自由的获得每一行中的信息。

3.Spark millb简介:

1. Spark包含一个提供常见的机器学习(ML)功能的程序库,叫做MLlib。

它提供了很多种机器学习算法,包括分类、回归、聚类、协同过滤等,还提供了模型评估、数据导入等额外的支持功能。MLlib还提供了一些更底层的机器学习原语,包括一个通用的梯度下降优化算法。所有这些方法都被设计为可以在集群上轻松伸缩的架构。

2.MLlib的设计理念:把数据以RDD的形式表示,然后在分布式数据集上调用各种算法。

Mllib引入了一些数据类型(比如点和向量),不过归根结底,Mllib就是RDD上一系列可供调用的函数的集合。
(1)首先用字符串RDD来表示你的消息。
(2)运行MLlib中的一个特征提取(feature extraction算法来把文本数据转换为数值特征(适合机器学习算法处理);该操作会返回一个向量RDD。
(3)对向量RDD调用分类算法(比如逻辑回归);这步会返回一个模型对象,可以使用该对象对新的数据点进行分类。
(4)使用MLlib的评估函数在测试数据集上评估模型。

在这里插入图片描述

参考链接: https://blog.csdn.net/superman_xxx/article/details/52843888?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_utm_term-3&spm=1001.2101.3001.4242.

猜你喜欢

转载自blog.csdn.net/weixin_48929324/article/details/112685932