10.3.2 RDDDataSet 的交互

1. 从 RDDDataSet

使用反射来推断包含特定类型对象的RDD的 schema 。

这种基于反射的方法可以生成更简洁的代码,并且当您在编写Spark应用程序时已经知道模式时,这种方法可以很好地工作。

为 Spark SQL 设计的 Scala API 可以自动的把包含样例类的 RDD 转换成 DataSet.

样例类定义了表结构: 样例类参数名通过反射被读到, 然后成为列名.

样例类可以被嵌套, 也可以包含复杂类型: 像Seq或者Array.

scala> val peopleRDD = sc.textFile("examples/src/main/resources/people.txt")
peopleRDD: org.apache.spark.rdd.RDD[String] = examples/src/main/resources/people.txt MapPartitionsRDD[1] at textFile at <console>:24

scala> case class Person(name: String, age: Long)
defined class Person

scala> peopleRDD.map(line => {val para = line.split(",");Person(para(0),para(1).trim.toInt)}).toDS
res0: org.apache.spark.sql.Dataset[Person] = [name: string, age: bigint]

2. 从 DataSetRDD

调用rdd方法即可

scala> val ds = Seq(Person("lisi", 40), Person("zs", 20)).toDS
ds: org.apache.spark.sql.Dataset[Person] = [name: string, age: bigint]

// 把 ds 转换成 rdd
scala> val rdd = ds.rdd
rdd: org.apache.spark.rdd.RDD[Person] = MapPartitionsRDD[8] at rdd at <console>:27

scala> rdd.collect
res5: Array[Person] = Array(Person(lisi,40), Person(zs,20))
Copyright © 尚硅谷大数据 2019 all right reserved,powered by Gitbook
该文件最后修订时间: 2019-08-09 00:21:43

results matching ""

    No results matching ""