Spark SQL - Parquet 文件

Parquet 是一种列式格式,许多数据处理系统都支持该格式。列式存储的优点如下 −

  • 列式存储限制 IO 操作。

  • 列式存储可以获取您需要访问的特定列。

  • 列式存储占用更少的空间。

  • 列式存储提供更好的汇总数据并遵循特定类型的编码。

Spark SQL 支持读取和写入 parquet 文件,可自动捕获原始数据的架构。与 JSON 数据集一样,parquet 文件遵循相同的程序。

让我们再看一下相同的 employee 记录数据示例,该数据名为 employee.parquet,放置在运行 spark-shell 的同一目录中。

给定数据 − 不必费心将员工记录的输入数据转换为 parquet 格式。我们使用以下命令将 RDD 数据转换为 Parquet 文件。放置 employee.json 文档,我们在前面的示例中将其用作输入文件。

$ spark-shell
Scala> val sqlContext = new org.apache.spark.sql.SQLContext(sc)
Scala> val employee = sqlContext.read.json("emplaoyee")
Scala> employee.write.parquet("employee.parquet")

无法向您显示 parquet 文件。它是一个目录结构,您可以在当前目录中找到它。如果您想查看目录和文件结构,请使用以下命令。

$ cd employee.parquet/

$ ls
_common_metadata
Part-r-00001.gz.parquet
_metadata
_SUCCESS

以下命令用于读取、注册到表中以及对其应用一些查询。

打开 Spark Shell

使用以下示例启动 Spark shell

$ spark-shell

创建 SQLContext 对象

使用以下命令生成 SQLContext。这里,sc 表示 SparkContext 对象。

scala> val sqlContext = new org.apache.spark.sql.SQLContext(sc)

从文本文件读取输入

使用以下语句从名为 employee.parquet 的 parquet 文件中读取数据,创建 RDD DataFrame。

scala> val parqfile = sqlContext.read.parquet("employee.parquet")

将 DataFrame 存储到表中

使用以下命令将 DataFrame 数据存储到名为 employee 的表中。执行此命令后,我们可以将所有类型的 SQL 语句应用于其中。

scala> Parqfile.registerTempTable("employee")

employee 表已准备就绪。现在让我们使用方法 SQLContext.sql() 在表上传递一些 SQL 查询。

在 DataFrame 上选择查询

使用以下命令从 employee 表中选择所有记录。在这里,我们使用变量 allrecords 来捕获所有记录数据。要显示这些记录,请对其调用 show() 方法。

scala> val allrecords = sqlContext.sql("SELeCT * FROM employee")

要查看 allrecords DataFrame 的结果数据,请使用以下命令。

scala> allrecords.show()

输出

+------+--------+----+
|  id  | name   |age |
+------+--------+----+
| 1201 | satish | 25 |
| 1202 | krishna| 28 |
| 1203 | amith  | 39 |
| 1204 | javed  | 23 |
| 1205 | prudvi | 23 |
+------+--------+----+

spark_sql_data_sources.html