前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >了解Spark SQL,DataFrame和数据集

了解Spark SQL,DataFrame和数据集

作者头像
liuxuewen
修改2018-09-17 17:16:45
1.4K0
修改2018-09-17 17:16:45
举报
文章被收录于专栏:技术翻译

对于数据集和DataFrameAPI存在很多混淆,因此在本文中,我们将带领大家了解SparkSQL、DataFrames和DataSet。

Spark SQL

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

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

DataFrames

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

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

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

创建DataFrames

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

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

从RDDs创建DataFrames

代码语言:javascript
复制
val rdd = sc.parallelize(1 to 10).map(x => (x, x * x))
val dataframe = spark.createDataFrame(rdd).toDF("key", "sqaure")
dataframe.show()
//Output:
+---+-----+
|key|value|
+---+-----+
|  1|    1|
|  2|    4|
|  3|    9|
|  4|   16|
|  5|   25|
|  6|   36|
|  7|   49|
|  8|   64|
|  9|   81|
| 10|  100|
+---+-----+

数据集

DataSet是一个强类型的、不可变的数据集合。与DataFrame类似,DataSet中的数据被映射到定义的架构中。它更多的是关于类型安全和面向对象的。

DataFrame和DataSet之间有几个重要的区别。

· DataSet中的每一行都由用户定义的对象表示,因此可以将单个列作为该对象的成员变量。这为你提供了编译类型的安全性。

· DataSet有称为编码器的帮助程序,它是智能和高效的编码实用程序,可以将每个用户定义的对象内的数据转换为紧凑的二进制格式。这意味着,如果数据集被缓存在内存中,则内存使用量将减少,以及SPark在混洗过程中需要通过网络传输的字节数减少。

创建数据集

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

· 第一种方法是使用DataFrame类的as(symbol)函数将DataFrame转换为DataSet。

· 第二种方法是使用SparkSession.createDataset()函数从对象的本地集合创建数据集。

· 第三种方法是使用toDS隐式转换实用程序。

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

代码语言:javascript
复制
// create a Dataset using SparkSession.createDataset() and the toDS 
val movies = Seq(Movie("DDLJ", "Awesome", 2018L),  Movie("ADHM", "Nice", 2018L))
val moviesDS = spark.createDataset(localMovies)
moviesDS.show()
val moviesDS1 = localMovies.toDS()
localMoviesDS1.show()
// Encoders are created for case classes
case class Employee(name: String, age: Long)
val caseClassDS = Seq(Employee("Amy", 32)).toDS
caseClassDS.show()
// convert DataFrame to strongly typed Dataset
case class Movie(actor_name:String, movie_title:String, produced_year:Long)
val movies = Seq(("Damon, Matt", "The Bourne Ultimatum", 2007L),
    ("Damon, Matt", "Good Will Hunting", 1997L))
val moviesDF = movies.toDF.as[Movie]

谢谢你阅读这篇文章,希望能对你有所帮助。

原文标题《Understanding Spark SQL, DataFrames, and Datasets》

作者:Teena Vashist

译者:lemon

不代表云加社区观点,更多详情请查看原文链接

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Spark SQL
  • DataFrames
  • 创建DataFrames
  • 从RDDs创建DataFrames
  • 数据集
  • 创建数据集
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档