马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
1. 概念:
RDD:
弹性分布式数据集;
DataFrame:
DataFrame是一种以RDD为根本的分布式数据集,雷同于传统数据库中的二维表格。带有schema元信息,即DataFrame所表现的二维表数据集的每一列都带著名称和范例。如许的数据集可以用SQL查询。DataFrame是不可变的,即一旦创建,就不能修改其内容。
DataFrame 是 DataSet[Row]
DataSet:
简朴的说,DataSet和DataFrame的区别就是,DataSet会在编译阶段就举行范例查抄 ,而DataFrame在运行阶段才会范例查抄。
Dataset是一个强范例的特定范畴的对象,Dataset也被称为DataFrame的范例化视图,这种DataFrame是Row范例的Dataset,即Dataset[Row]。Dataset团结了DataFrame的优化和RDD的范例安全。Dataset提供了编译时范例查抄(而DataFrame不会,DataFrame只会在运行阶段才会查抄范例),确保数据在编译阶段就符合预期的范例。
dataset是dataFrame的升级版对象,dataframe是一个传统的sql编程对象,如果要想利用dataframe举行机动开发的比力复杂。
dataset和dataFrame是一个种别的对象,都是可以举行sql查询数据的,而且可以支持rdd上面的方法。
当我们必要对一个表对象举行二次处置处罚的话发起各人转换为dataset而不是dataframe。- package com.hainiu.spark
- import org.apache.spark.sql.{Dataset, SparkSession}
- object TestDSAndDF {
- def main(args: Array[String]): Unit = {
- val session = SparkSession.builder().master("local[*]").appName("test").getOrCreate()
- import session.implicits._
- val ds: Dataset[String] = session.read.textFile("file:///headless/workspace/spark/data/a.txt")
- ds.map(t=>{
- val strs = t.split(" ")
- (strs(0), strs(1), strs(2), strs(3))
- })
- // val df = session.read.format("org.apache.spark.sql.execution.datasources.v2.text.TextDataSourceV2")
- // .load("file:///headless/workspace/spark/data/a.txt")
- //
- // val ds: Dataset[(String, String, String, String)] = df.map(row => {
- // val line = row.getAs[String]("value")
- // val strs = line.split(" ")
- // (strs(0), strs(1), strs(2), strs(3))
- // })
- }
- }
复制代码 2. 三者之间的转换
- val ds: Dataset[String] = session.read.textFile("file:///headless/workspace/spark/data/a.txt")
- ds.map(t=>{
- val strs = t.split(" ")
- (strs(0), strs(1), strs(2), strs(3))
- })
- val df1 = ds.toDF("id","name","age","gender")
- val df: Dataset[Row] = session.read.format("org.apache.spark.sql.execution.datasources.v2.text.TextDataSourceV2")
- .load("file:///headless/workspace/spark/data/a.txt")
- val rdd = session.sparkContext.textFile("file:///headless/workspace/spark/data/a.txt")
- rdd.toDS()
- rdd.toDF()
- df.rdd
- ds.rdd
复制代码 |