了解Spark SQL,DataFrame和数据集

关于Datasets和DataFrame API存在很多混淆,因此在本文中,我们将了解Spark SQL,DataFrames和Datasets。

Spark SQL

它是一个用于结构化数据处理的Spark模块,它允许您编写更少的代码来完成工作,并且在底层,它可以智能地执行优化。Spark SQL模块由两个主要部分组成。我们将仅讨论本文的第一部分,它是结构API的表示,称为DataFrames和Datasets,它们定义了用于处理结构化数据的高级API。

Spark SQL模块的一个很酷的功能是能够执行SQL查询来执行数据处理,查询的结果将作为数据集或数据框返回。Spark SQL模块可以轻松读取数据并从以下任何格式写入数据; CSV,XML和JSON以及二进制数据的常见格式是Avro,Parquet和ORC。

DataFrames

数据框是一个分布式的数据集合,它按行组织,每行包含一组列,每列都有一个名称和一个关联的类型。换句话说,这个分​​布式数据集合具有由模式定义的结构。您可以将它视为关系数据库中的表,但在引擎盖下,它具有更丰富的优化。

与RDD一样,DataFrame提供两种类型的操作:转换和操作

对转换进行了延迟评估,并且热切地评估了操作。

创建DataFrame

有几种方法可以创建DataFrame; 其中一个常见的事情是需要隐式或显式地提供模式。

以下代码将完全使用Spark 2.x和Scala 2.11

从RDD创建DataFrame

val  rdd  =  sc。并行化(1 10)。map(x  =>(x,x  *  x))
val  dataframe  =  spark。createDataFrame(rdd)。toDF(“key”“sqaure”
数据帧。show()
 
//输出:
 
+ --- + ----- +
| 关键| 价值|
+ --- + ----- +
|   1 |     1 |
|   2 |     4 |
|   3 |     9 |
|   4 |    16 |
|   5 |    25 |
|   6 |    36 |
|   7 |    49 |
|   8 |    64 |
|   9 |    81 |
|  10 |   100 |
+ --- + ----- +

数据集

数据集是一种强类型,不可变的数据集合。与DataFrame类似,数据集中的数据映射到定义的模式。它更多的是关于类型安全性并且是面向对象的。

DataFrame和数据集之间存在一些重要差异。

  • 数据集中的每一行都由用户定义的对象表示,以便您可以将单个列称为该对象的成员变量。这为您提供了编译类型的安全性。
  • 数据集具有称为编码器的帮助器,它是智能且高效的编码实用程序,可将每个用户定义对象内的数据转换为紧凑的二进制格式。如果数据集缓存在内存中,以及在混洗过程中Spark需要通过网络传输的字节数减少,这可以减少内存使用量。

创建数据集

有几种方法可以创建数据集:

  • 第一种方法是使用DataFrame类的as(Symbol)函数将DataFrame转换为数据集。
  • 第二种方法是使用SparkSession.createDataset()函数从本地对象集合创建数据集。
  • 第三种方法是使用toDS隐式转换实用程序。

让我们看看创建数据集的不同方法

//使用SparkSession.createDataset()和toDS创建数据集 
val  movies  =  Seq(电影(“DDLJ”“Awesome”2018L),   电影(“ADHM”“Nice”2018L))
val  moviesDS  =  spark。createDataset(localMovies)
电影DS。show()
val  moviesDS1  =  localMovies。toDS()
localMoviesDS1。show()
 
//为案例类创建编码器
case  class  Employee(name:String,age:Long
val  caseClassDS  =  Seq(Employee(“Amy”32))。TODS
caseClassDS。show()
 
//将DataFrame转换为强类型数据集
案例  电影(ACTOR_NAME:字符串,MOVIE_TITLE:字符串,produced_year:
val  movies  =  Seq((“Damon,Matt”“The Bourne Ultimatum”2007L),
“达蒙,马特”“善意狩猎”1997L))
val  moviesDF  =  电影。toDF。作为 [ 电影 ]

感谢您阅读本文,希望对您有所帮助。

猜你喜欢

转载自blog.csdn.net/Tybyqi/article/details/82901025
今日推荐