Spark 2.x管理与开发-Spark SQL-Spark SQL基础 (五)创建Dataset ✔

Posted on 2020-07-19 22:33  MissRong  阅读(188)  评论(0)    收藏  举报

Spark 2.x管理与开发-Spark SQL-Spark SQL基础 (五)创建Dataset ✔

DataSet:跟DataFrame类似,是一套新的接口。 

把DataSet理解成高级的DataFrame

DataFrame的引入,可以让Spark更好的处理结构数据的计算,但其中一个主要的问题是:缺乏编译时类型安全。

为了解决这个问题,Spark采用新的Dataset API (DataFrame API的类型扩展)。

 

Dataset是一个分布式的数据收集器。这是在Spark1.6之后新加的一个接口,兼顾了RDD的优点(强类型,可以使用功能强大的lambda)以及Spark SQL的执行器高效性的优点。所以可以把DataFrames看成是一种特殊的Datasets,即:Dataset(Row)

1.创建DataSet,方式一:使用序列

1)定义case class

    case class MyData(a:Int,b:String)

2)生成序列,并创建DataSet

   val ds = Seq(MyData(1,"Tom"),MyData(2,"Mary")).toDS

3)查看结果 

 

2.创建DataSet,方式二:使用JSON数据

1)定义case class

             case class Person(name: String, gender: String)

2)通过JSON数据生成DataFrame

             val df = spark.read.json(sc.parallelize("""{"gender": "Male", "name": "Tom"}""" :: Nil))

3)将DataFrame转成DataSet

               df.as[Person].show

               df.as[Person].collect

3.创建DataSet,方式三:使用HDFS数据

1)读取HDFS数据,并创建DataSet

                val linesDS = spark.read.text("hdfs://hadoop111:9000/data/data.txt").as[String]

2)对DataSet进行操作:分词后,查询长度大于3的单词

                val words = linesDS.flatMap(_.split(" ")).filter(_.length > 3)

                words.show

                words.collect

3)执行WordCount程序

             val result = linesDS.flatMap(_.split(" ")).map((_,1)).groupByKey(x => x._1).count

             result.show

4)排序

result.orderBy($"value").show

*************自己操作***********

创建DataSet

举例:

1)使用序列创建DataSet

 

 

2)使用Json数据

(1)定义case class

(2)通过Json生成DataFrame

(3)将DataFrame转换成DataSet

 

 

 

3)使用其他数据(过滤出长度大于3的字符串)

RDD操作和DataFrame操作的结合

 

 

单词计数

 

再对单词计数的结果进行排序:

博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3