Spark SQL, DataFrames and Datasets指南

spark 2.4.4

Spark SQL是用于处理结构化数据的Spark模块。不同于基本的Spark RDD API,Spark SQL提供的接口为Spark提供了关于数据和正在执行的计算更多的信息。Spark SQL可以利用这些额外的信息在内部执行额外的优化。与Spark SQL交互的方式有多种例如SQL和Dataset API。无论你用什么API或者编程语言来组织你的计算,Spark都是用相同的执行引擎来计算。 这种统一意味着开发人员可以轻松地在不同的API之间来回切换,这些API都提供最自然的方式来表达给定的转换(transformation)。

SQL

Spark SQL的一种用途是执行SQL查询。 Spark SQL还可以用于从现有的Hive安装中读取数据。 有关如何配置此功能的更多信息,请参考Hive Tables部分。 当从另一种编程语言中运行SQL时,结果将作为Dataset / DataFrame返回。 您还可以使用命令行或通过JDBC / ODBC与SQL接口进行交互。

Datasets and DataFrames

Dataset是数据的分布式集合。Dataset是Spark 1.6中添加的新接口,它具有RDD的优点(强类型,强大的Lambda函数的能力)以及Spark SQL自身优化引擎的优势。可以从JVM对象来构造Dataset,然后使用功能转换(map,flatMap,filter等)进行操作。 Dataset API在Scala和Java中可用。 Python不支持Dataset API。但是由于Python的动态特性,Dataset API的许多优点已经可用(即,您可以自然地通过名称row.columnName来访问行的字段)。 R的情况类似。

DataFrame是组织为命名列的数据集。 从概念上讲,它等效于关系数据库中的table或R / Python中的data frame,但是在后台进行了更丰富的优化。可以从多种来源构造DataFrame,例如:结构化数据文件,Hive中的表,外部数据库或现有RDD。DataFrame API在Scala,Java,Python和R中可用。在Scala和Java中,DataFrame由行的数据集(Dataset of Rows)表示。 在Scala API中,DataFrame只是Dataset [Row]的别名。 而在Java API中,用户需要使用Dataset 表示一个DataFrame。

我们经常将Scala / Java的 “行数据集”(Datasets of RowS)称为DataFrames。

 

翻译于2020年第一个周六,用于加深概念理解。

你可能感兴趣的:(spark)