spark之Dataset

@InterfaceStability.Stable
public class Dataset<T>
extends Object
implements scala.Serializabl

1)Dataset是面向特定领域的强类型集合

2)每个Dataset具有一个称为DataFrame的无类型视图,该视图是类型为Row的Dataset,也就是说DataFrame是Dataset的特例。

3)与RDD类似,DataSet包含Transformation和Action两种操作。

4)两种创建Dataset的方式:

使用SparkSession的read方法:

val people = spark.read.parquet("...").as[Person]  // Scala
Dataset<Person> people = spark.read().parquet("...").as(Encoders.bean(Person.class)); // Java

通过已有的Dataset转换:

val names = people.map(_.name)  // in Scala; names is a Dataset[String]
Dataset<String> names = people.map((Person p) -> p.name, Encoders.STRING)); // in Java 8

5)Dataset、RDD、DataFrame之间的关系:

在SparkSQL中Spark为我们提供了两个新的抽象,分别是DataFrame和DataSet。他们和RDD有什么区别呢?首先从版本的产生上来看:
RDD (Spark1.0) —> Dataframe(Spark1.3) —> Dataset(Spark1.6)

如果同样的数据都给到这三个数据结构,他们分别计算之后,都会给出相同的结果。不同是的他们的执行效率和执行方式。

在后期的Spark版本中,DataSet会逐步取代RDD和DataFrame成为唯一的API接口

关于三者之间关系的具体总结参考《RDD和DataFrame和DataSet三者间的区别

猜你喜欢

转载自blog.csdn.net/yuan1164345228/article/details/108606543