RDD,DataFrame,DataSet及三者之间的转换

  • RDD:

    以Person为类型参数,但是Spark框架本身不了解Person类的内部结构。
  • DataFrame:

    DataFrame每一行的类型固定为Row, 每一列的值没法直接访问,只有通过解析才能获取各个字段的值。
  • DataSet:
    DataFrame也可以叫DataSet[Row],每一行类型是Row,不解析,每一行究竟有哪些字段,各个字段又是什么类型都无从得知,只能用上面的getAs方法拿出特定字段,而DataSet中,每一行是什么类型是不一定的,在自定义case class之后可以很自由的获取每一行的信息。
  • 三者关系
    RDD是分布式的Java对象的集合。DataFrame是分布式的Row对象的集合,DataFrame=Dataset[Row]。
RDD DataFrame Dataset
3者区别:数据类型 RDD[Int] DataFrame:不能跟数据类型 Dataset[Int]
2者区别: 1. DataFrame中存放的数据类型Row代表的是行数据,一个row就是一行数据。2.但是Row中每一行中有几列数据,每一列数据是什么类型,什么字段名Row都无法看出来,需要通过row.getAs[数据类型](列名/列的索引)获取对应的列的结果 1. Dataset除了Row类型意外,可以存储Scala支持的任何一种数据类型。包括元组、类或其他类型数据,Dataset中存放的每一种数据类型就是Dataset表格结构中的一行数据。
  • 三者之间的转换
转换 函数
RDD直接转DataFrame 隐式转换函数toDF
RDD直接转Dataset 隐式转换函数toDS
DataFram转换RDD dataframe.rdd
DataFrame转换Dataset dataframe.as[类型]--导入隐式转换
Dataset转DataFrame dataset.toDF
Dataset转RDD dataset.rdd
posted @   jsqup  阅读(158)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示