names = people.map((Person p) -> p.name, Encoders.STRING));
```
#### 二、Encoder
这里还介绍一个**Encoder**概念。Encoder是用来支持Dataset的领域对象的,我们知道,Dataset中的每一行可以当做一个Bean,这是需要`Encoder`来支撑的。它的作用是把领域对象`T`变成`Spark`内部的类型系统。例如,给定一个类`Person`,它包含两个字段一个是`name(string)`一个是年龄`age(int)`,那么一个encoder用来告诉Spark在运行时产生一些代码,将Person对象序列化成一个二进制的结构。在Scala中,Encoder会被自动计算,而Java中则要显示制定Encoder对象。如:
```
val people = spark.read.parquet("...").as[Person] // Scala
Datasetpeople = spark.read().parquet("...").as(Encoders.bean(Person.class)); // Java
```
Encoder是Spark SQL中序列化和反序列化最基本的概念。
Encoder特征:
```scala
trait Encoder[T] extends Serializable {
def schema: StructType
def clsT