Spark SQL (一)开始入门(仅示范JAVA)

开始入门

  • 1. 起始点:SparkSession
  • 2. 创建DataFrames
  • 3. 无类型的Dataset操作(aka DataFrame 操作)
  • 4. 应用程序以编程的方式运行 SQL 查询(Running SQL Queries Programmatically)
  • 5. 全局临时视图
  • 6. 创建Datasets
  • 7. RDD的互操作性
    • 7.1 使用反射推断Schema
    • 7.2 以编程的方式指定Schema
  • 8. 聚合(Aggregations)
    • 8.1 非类型化用户定义聚合函数(Untyped User-Defined Aggregate Functions)
    • 8.2 类型安全的用户定义聚合函数(Type-Safe User-Defined Aggregate Functions)

1. 起始点:SparkSession

Spark SQL中所有功能的入口点是Sparksession类。要创建一个Sparksession,仅使用 SparkSession.builder()就可以了:
Find full example code at “examples/src/main/java/org/apache/spark/examples/sql/JavaSparkSQLExample.java” in the Spark repo.

import org.apache.spark.sql.SparkSession;
SparkSession spark = SparkSession
  .builder()
  .appName("Java Spark SQL basic example")
  .master("local[*]")
  .config("spark.some.config.option", "some-value")
  .getOrCreate();

Spark2.0中的Sparksession为Hive特性提供了内嵌的支持,包括使用HiveQL编写查询的能力,访问Hive UDF,以及从Hive表中读取数据的能力。为了使用这些特性,你不需要去有一个已存在的Hive设置。

2. 创建DataFrames

在一个Sparksession中,应用程序可以从一个已经存在的RDD ,从hive表,或者从Spark数据源中创建一个DataFrames。
举个例子,下面就是基于一个JSON文件创建一个DataFrame
Find full example code at “examples/src/main/java/org/apache/spark/examples/sql/JavaSparkSQLExample.java” in the Spark repo.

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;

Dataset<Row> df = spark.read().json("examples/src/main/resources/people.json");

// DatasetFrame 标准输出显示的内容 *Displays the content of the DataFrame to stdout*
df.show();
// +----+-------+
// | age|   name|
// +----+-------+
// |null|Michael|
// |  30|   Andy|
// |  19| Justin|
// +----+-------+

3. 无类型的Dataset操作(aka DataFrame 操作)

DataFrames 提供了一个特定的语法用在 ScalaJavaPython and R中机构化数据的操作。
正如上面提到的一样,Spark 2.0 中,DataFrames 在 Scala 和 Java API 中,仅仅是多个 Row 的 Dataset。这些操作也参考了与强类型的 Scala/Java Datasets 中的 “类型转换” 对应的 “无类型转换”
这里包括一些使用 Dataset 进行结构化数据处理的示例 :
Find full example code at “examples/src/main/java/org/apache/spark/examples/sql/JavaSparkSQLExample.java” in the Spark repo.

// col("...") is preferable to df.col("...")
import static org.apache.spark.sql.functions.col;

// 以树格式打印架构 *Print the schema in a tree format* 
df.printSchema();
// root
// |-- age: long (nullable = true)
// |-- name: string (nullable = true)

// 仅选择“name”列  *Select only the "name" column*
df.select("name").show();
// +-------+
// |   name|
// +-------+
// |Michael|
// |   Andy|
// | Justin|
// +-------+

// 选择所有人,但年龄增加1 *Select everybody, but increment the age by 1*
df.select(col("name"), col("age").plus(1)).show();
// +-------+---------+
// |   name|(age + 1)|
// +-------+---------+
// |Michael|     null|
// |   Andy|       31|
// | Justin|       20|
// +-------+---------+

// 选择21岁以上的人 *Select people older than 21*
df.filter(col("age").gt(21)).show();
// +---+----+
// |age|name|
// +---+----+
// | 30|Andy|
// +---+----+

// 按年龄计算人数 *Count people by age*
df.groupBy("age").count().show();
// +----+-----+
// | age|count|
// +----+-----+
// |  19|    1|
// |null|    1|
// |  30|    1|
// +----+-----+

为了能够在 DataFrame 上被执行的操作类型的完整列表请参考 API 文档

除了简单的列引用和表达式之外,DataFrame 也有丰富的函数库,包括 string 操作,date 算术,常见的 math 操作以及更多。可用的完整列表请参考 DataFrame 函数指南

4. 应用程序以编程的方式运行 SQL 查询(Running SQL Queries Programmatically)

SparkSessionsql 函数可以让应用程序以编程的方式运行 SQL 查询,并将结果作为一个 Dataset 返回。
Find full example code at “examples/src/main/java/org/apache/spark/examples/sql/JavaSparkSQLExample.java” in the Spark repo.

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;

//将DataFrame 注册为SQL临时视图 *Register the DataFrame as a SQL temporary view*
df.createOrReplaceTempView("people");

Dataset<Row> sqlDF = spark.sql("SELECT * FROM people");
sqlDF.show();
// +----+-------+
// | age|   name|
// +----+-------+
// |null|Michael|
// |  30|   Andy|
// |  19| Justin|
// +----+-------+

5. 全局临时视图

6. 创建Datasets

7. RDD的互操作性

7.1 使用反射推断Schema

7.2 以编程的方式指定Schema

8. 聚合(Aggregations)

8.1 非类型化用户定义聚合函数(Untyped User-Defined Aggregate Functions)

8.2 类型安全的用户定义聚合函数(Type-Safe User-Defined Aggregate Functions)

你可能感兴趣的:(SparkSQL中文文档)