Spark 2.0介绍:Dataset介绍和使用

Spark 2.0介绍:Dataset介绍和使用

Spark2.0是Apache Spark的下一个主要版本。

此版本在架构抽象、API以及平台的类库方面带来了很大变化。

DataSet是从Spark1.6开始引入的一个新的抽象,当时还是处于alpha版本;然而在Spark2.0,它已经变成了稳定版了。

Dataset是特定域对象中的强类型集合,它可以使用函数或者相关操作并行地进行转换等操作。
每个Dataset都有一个称为DataFrame的非类型化视图,这个视图是行的数据集。

RDD也可以并行化的操作,DataSet和RDD主要的区别是:

DataSet是特定域的对象集合;
RDD是任何对象的集合。

1.创建SparkSession

val sparkSession = SparkSession.builder.
                    master("local")
                    .appName("example")
                    .getOrCreate()

2.读取数据并将它转换成DataSet

可以使用read.text API来读取数据,正如RDD版提供的textFile,as[String]可以为dataset提供相关的模式
import sparkSession.implicits._

val data = sparksession.read.text("").as[String]
上面data对象的类型是DataSet[String],我们需要引入sparkSession.implicits._

3.分割单词并且对单词进行分组

DataSet提供的API和RDD提供的非常类似,所以也可以在DataSet对象上使用map.groupByKey相关的API
val words = data.flatMap(value => value.split("\\s+"))
val groupedWords = words.groupByKey(_.toLowerCase)
DataSet是工作在行级别的抽象,每个值将被看做带有多列的行数据,而且每个值都可以看做是group的key

4.计数

一旦我们有了分组好的数据,我们可以使用count方法对每个单词进行计数,正如在RDD上使用reduceByKey
val counts = groupedWords.count()

5.打印结果

counts.show()

SparkDemo

package com.lmbang.spark

import org.apache.spark.sql.{Row, SparkSession}
import org.apache.log4j._

object SparkDemo {

  def main(args: Array[String]) {
    Logger.getLogger("org").setLevel(Level.ERROR)
    // 1.创建SparkSession
    val sparkSession = SparkSession.builder().master("local").appName("Demo").getOrCreate()
    // 2.读取数据并将它转换成DataSet
    import sparkSession.implicits._
    val data = sparkSession.read.text("F:\\IdeaProjects\\Ngram\\resource\\aa.txt").as[String]
//    val data = sparkSession.read.text("F:\\IdeaProjects\\Ngram\\resource\\u.user").as[String].map { line => Row(line.split("\\|")(0).toString, line.split("\\|")(1).toString, line.split("\\|")(2).toString, line.split("\\|")(3).toString, line.split("\\|")(4).toString) }
    //    data.toDF()
    // 3.分割单词并且对单词进行分组
    val words = data.flatMap(value => value.split(" "))
    val groupedWords = words.groupByKey(_.toLowerCase)
    // 4.计数
    val counts = groupedWords.count()
    // 5.打印结果
    counts.show()
  }
}

你可能感兴趣的:(hadoop生态组件)