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 | +------+--------+----+