搜索
写经验 领红包
 > 知识

spak数据结构(spak机器算法)

导语:spark2.0机器学习——数据结构

在spark中,RDD、DataFrame、Dataset是最常用的数据结构,全都是spark平台下的分布式弹性数据集,为处理超大型数据提供便利,三者都有惰性机制,在进行创建、转换,如map方法时,不会立即执行,只有在遇到Action如foreach时,三者才会开始遍历运算。

弹性数据集(RDD)

RDD是Spark建立之初的核心API,一般和spark mlib同时使用(目前spark mllib处于维护状态,将被ml取代),不支持sparksql操作。

RDD的数据没有定义Schema(也就是字段及数据类型),使用上必须有map/reduce的概念,它是一个容错且可以执行并行操作的元素的集合。有两种方法可以创建 RDD : 在你的 driver program(驱动程序)中 parallelizing 一个已存在的集合,或者在外部存储系统中引用一个数据集,例如,一个共享文件系统,HDFS,HBase,或者提供 Hadoop InputFormat 的任何数据源。

创建一个RDD(在spark2.0中,此时的RDD是Dataset)

创建RDD常用方法:(暂时在单机的模式下)

1,一个列表传入SparkContext的parallelize()方法中生成RDD

2,textFile方法读取外部数据创建RDD

Spark DataFrame

DataFrame 创建时必须定义Schema(也就是字段及数据类型),所以在早期版本中DataFrame也被称为Schema RDD。

创建DataFrame的三种方式:

1,由RDD生成DataFrame的toDF方法,

2,通过createDataFrame方法

3,通过read读取外部数据

Dataset

Dataset和DataFrame拥有完全相同的成员函数,DataFrame也可以叫Dataset[Row],每一行的类型是Row,只有通过解析才能获取各个字段的值,无法直接获取每一列的值。

DataFrame与Dataset一般与spark ml同时使用,DataFrame与Dataset均支持sparksql的操作,比如select,groupby之类,还能注册临时表/视窗,进行sql语句操作

DataFrame与Dataset支持一些特别方便的保存方式,比如保存成csv,可以带上表头,这样每一列的字段名一目了然

对于我来说,在数据处理和机器学习过程中,很少用到DataSet,一般都是用DataFrame这种格式,因为python中也提供类似的DataFrame格式数据,结合python使用更加顺手!

本文内容由快快网络小婷创作整理编辑!