Spark 2.0介绍:Dataset介绍和使用

发布 : 2017-01-12 分类 : 大数据 浏览 :
1
2
3
4
5
6
7
8
9
10
11
12
13
Spark2.0是Apache Spark的下一个主要版本。

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

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

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

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

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

1.创建SparkSession

1
2
3
4
val sparkSession = SparkSession.builder.
master("local")
.appName("example")
.getOrCreate()

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

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

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

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

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

4.计数

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

1
val counts = groupedWords.count()

5.打印结果

1
counts.show()

SparkDemo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
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()
}
}

Markdown

本文作者 : Matrix
原文链接 : https://matrixsparse.github.io/2017/01/12/Spark 2.0介绍:Dataset介绍和使用/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

知识 & 情怀 | 二者兼得

微信扫一扫, 向我投食

微信扫一扫, 向我投食

支付宝扫一扫, 向我投食

支付宝扫一扫, 向我投食

留下足迹