spark Dataset
时间: 2025-04-01 18:12:51 AIGC 浏览: 37
### Apache Spark Dataset API 使用指南及示例
#### 什么是 Dataset?
Dataset 是 Spark 中一种强类型的分布式数据集合,它结合了 RDD 和 DataFrame 的优点。Dataset 提供了编译期类型安全性和运行时性能优化的能力[^1]。
#### 创建 Dataset
可以通过多种方式创建 Dataset,常见的方法是从现有 RDD 或者通过读取外部数据源来构建。下面是一个简单的例子:
```scala
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.Dataset
val spark: SparkSession = SparkSession.builder()
.appName("Dataset Example")
.master("local[*]")
.getOrCreate()
// 导入隐式转换
import spark.implicits._
// 定义样例类
case class Person(name: String, age: Int)
// 创建一个 List 并将其转化为 Dataset
val dataSeq: Seq[Person] = Seq(Person("Alice", 25), Person("Bob", 30))
val ds: Dataset[Person] = dataSeq.toDS()
ds.show() // 显示 Dataset 数据
```
上述代码展示了如何定义一个 `Person` 类型的样例类,并将 Scala 集合对象转为 Dataset[^2]。
#### 转换操作 (Transformations)
类似于 RDD,Dataset 支持各种转换操作。这些操作不会立即执行,而是采用惰性求值的方式,在触发动作之前会先进行优化。
```scala
// 过滤年龄大于等于 28 岁的人
val filteredDs: Dataset[Person] = ds.filter(_.age >= 28)
filteredDs.show()
```
此片段演示了基于条件过滤的操作。
#### 动作操作 (Actions)
当需要实际获取结果或者保存数据时,则需调用行动操作。
```scala
// 执行收集操作并打印每条记录
filteredDs.collect().foreach(println)
```
这段代码实现了把符合条件的数据全部加载至驱动程序内存中并逐项输出。
#### 外部数据源支持
除了内部生成的数据外,还可以从 HDFS、S3 等位置加载数据作为 Dataset 输入源。
```scala
// 加载 JSON 文件成为 Dataset[String]
val path = "examples/src/main/resources/people.json"
val peopleDS: Dataset[String] = spark.read.textFile(path)
peopleDS.show()
```
这里说明了怎样利用路径参数指定远程存储上的文件地址从而导入数据[^3]。
#### 性能优势
由于采用了 Tungsten 计划引擎以及 Catalyst 查询优化器,使得 Dataset 在处理大数据量场景下具备较高的效率表现。
阅读全文
相关推荐

















