sparkSQL基本使用

226 阅读1分钟

1. 启动 Spark Shell

Spark Shell 是一个交互式的 Scala 命令行工具,可以用来快速测试 Spark SQL 的功能。启动方法如下:

bash

复制

spark-shell

2. 创建 SparkSession

SparkSession 是 Spark SQL 的入口点,用于创建 DataFrame、注册表等操作。在 Spark Shell 中,spark 是默认的 SparkSession 对象,可以直接使用。如果在其他环境中,可以通过以下代码创建:

scala

复制

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder
  .appName("Spark SQL basic example")
  .config("spark.some.config.option", "some-value")
  .getOrCreate()

3. 创建 DataFrame

DataFrame 是 Spark SQL 的核心数据结构,类似于关系数据库中的表。可以通过从文件加载数据、从现有 RDD 转换或直接定义数据来创建 DataFrame。

从文件加载数据

scala

复制

val df = spark.read.json("path/to/json/file.json")

支持的文件格式包括 JSON、CSV、Parquet 等。

从 RDD 转换

scala

复制

import spark.implicits._

val data = Seq((1, "Alice"), (2, "Bob"), (3, "Cathy"))
val rdd = spark.sparkContext.parallelize(data)
val df = rdd.toDF("id", "name")

直接定义数据

scala

复制

val data = Seq((1, "Alice"), (2, "Bob"), (3, "Cathy"))
val df = data.toDF("id", "name")

4. 查询 DataFrame

使用 DataFrame API

scala

复制

df.select("id", "name").show()
df.filter($"id" > 1).show()
df.groupBy("name").count().show()

使用 SQL 查询

scala

复制

df.createOrReplaceTempView("people") // 创建一个临时视图
spark.sql("SELECT * FROM people WHERE id > 1").show()

5. 数据保存

可以将 DataFrame 保存为文件,支持多种格式:

scala

复制

df.write.json("path/to/output/json")
df.write.csv("path/to/output/csv")
df.write.parquet("path/to/output/parquet")

6. 常见操作

数据类型转换

scala

复制

df.withColumn("id", $"id".cast("string")).show()

添加新列

scala

复制

df.withColumn("age", $"id" * 2).show()

数据排序

scala

复制

df.orderBy($"id".desc).show()

数据去重

scala

复制

df.dropDuplicates().show()

7. 关闭 SparkSession

在程序结束时,需要关闭 SparkSession:

scala

复制

spark.stop()

示例代码

以下是一个完整的示例代码:

scala

复制

import org.apache.spark.sql.SparkSession

object SparkSQLExample {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder
      .appName("Spark SQL basic example")
      .getOrCreate()

    import spark.implicits._

    val data = Seq((1, "Alice"), (2, "Bob"), (3, "Cathy"))
    val df = data.toDF("id", "name")

    df.createOrReplaceTempView("people")
    spark.sql("SELECT * FROM people WHERE id > 1").show()

    df.select("id", "name").show()
    df.filter($"id" > 1).show()
    df.groupBy("name").count().show()

    spark.stop()
  }
}

总结

Spark SQL 提供了强大的数据处理能力,结合了 SQL 的易用性和 Spark 的高性能。通过 DataFrame API 和 SQL 查询,可以轻松地对结构化数据进行操作和分析。