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.打印结果
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) val sparkSession = SparkSession.builder().master("local").appName("Demo").getOrCreate() import sparkSession.implicits._ val data = sparkSession.read.text("F:\\IdeaProjects\\Ngram\\resource\\aa.txt").as[String]
val words = data.flatMap(value => value.split(" ")) val groupedWords = words.groupByKey(_.toLowerCase) val counts = groupedWords.count() counts.show() } }
|
