大象教程
首页
Spark
Hadoop
HDFS
MapReduce
Hive
Spark 教程
Spark 教程
Spark 基本架构及运行原理
Spark 安装(本地模式)
Spark 安装(集群模式)
Spark Shell 的使用
使用Intellij idea编写Spark应用程序(Scala+Maven)
使用Intellij idea编写Spark应用程序(Scala+SBT)
SparkContext
Spark Stage
Spark Executor
Spark RDD
Spark RDD 的创建方式
Spark RDD 缓存机制
Spark 键值对 RDD
Spark RDD 基本操作
Spark RDD 依赖关系图
Spark Map 和 FlatMap 的比较
Spark DAG
Spark 集群管理器
Spark spark-submit 提交应用程序
Spark 共享变量
Spark SQL
Spark SQL 教程
Spark SQL 数据类型
Spark SQL DataFrame
Spark SQL 数据源
Spark SQL SparkSession
Spark SQL DataSet
RDD、DataFrame和DataSet的区别
Spark Streaming
Spark Streaming 教程
Spark Streaming DStream
Spark Streaming 检查点(checkpoint)
Spark GraphX
Spark GraphX 教程
Spark GraphX 图操作
Spark GraphX 算法实例
PySpark 教程
PySpark 教程
PySpark 环境设置
PySpark SparkContext
PySpark RDD
PySpark 广播和累加器
PySpark SparkConf
PySpark SparkFiles
PySpark 存储级别
PySpark MLlib
PySpark 序列化器
#Spark SQL DataSet **Dataset**是从Spark 1.6开始引入的一个新的抽象,当时还是处于alpha版本;然而在Spark 2.0,它已经变成了稳定版了。Dataset是特定域对象中的强类型集合,它可以使用函数或者相关操作并行地进行转换等操作。每个Dataset都有一个称为DataFrame的非类型化的视图,这个视图是行的数据集。 **DataSet和RDD主要的区别是:DataSet是特定域的对象集合;然而RDD是任何对象的集合。DataSet的API总是强类型的;而且可以利用这些模式进行优化,然而RDD却不行。** DataFrame和Dataset是有什么关系呢?其实DataFrame是特殊的Dataset,它在编译时不会对模式进行检测。在未来版本的Spark,Dataset将会替代RDD成为我们开发编程使用的API(**注意,RDD并不是会被取消,而是会作为底层的API提供给用户使用**)。 ##如何创建DataSet 那么如何创建DataSet呢?下面给出具体代码示例。 ```scala scala> case class Person(name:String, age:Long) defined class Person scala> val caseClassDS = Seq(Person("Andy",32)).toDS() caseClassDS: org.apache.spark.sql.Dataset[Person] = [name: string, age: bigint] scala> caseClassDS.show() +----+---+ |name|age| +----+---+ |Andy| 32| +----+---+ scala> val primitiveDS = Seq(1,2,3).toDS() primitiveDS: org.apache.spark.sql.Dataset[Int] = [value: int] scala> primitiveDS.map(_ + 1).collect() res1: Array[Int] = Array(2, 3, 4) scala> val path="hdfs:/tmp/people.json" path: String = hdfs:/tmp/people.json DataFrame转换成DataSet scala> val peopleDS=spark.read.json(path).as[Person] peopleDS: org.apache.spark.sql.Dataset[Person] = [age: bigint, name: string] scala> peopleDS.show() +---+-------+ |age| name| +---+-------+ | 20|Michael| | 30| Andy| | 19| Justin| +---+-------+ ```
加我微信交流吧