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 DataFrameDataFrame 创建时必须定义Schema(也就是字段及数据类型),所以在早期版本中DataFrame也被称为Schema RDD。
创建DataFrame的三种方式:
1,由RDD生成DataFrame的toDF方法,
2,通过createDataFrame方法
3,通过read读取外部数据
DatasetDataset和DataFrame拥有完全相同的成员函数,DataFrame也可以叫Dataset[Row],每一行的类型是Row,只有通过解析才能获取各个字段的值,无法直接获取每一列的值。
DataFrame与Dataset一般与spark ml同时使用,DataFrame与Dataset均支持sparksql的操作,比如select,groupby之类,还能注册临时表/视窗,进行sql语句操作
DataFrame与Dataset支持一些特别方便的保存方式,比如保存成csv,可以带上表头,这样每一列的字段名一目了然
对于我来说,在数据处理和机器学习过程中,很少用到DataSet,一般都是用DataFrame这种格式,因为python中也提供类似的DataFrame格式数据,结合python使用更加顺手!
本文内容由快快网络小婷创作整理编辑!