SCALA与SPARK编程基础
- 格式:pptx
- 大小:1.26 MB
- 文档页数:74
spark基础教程Spark基础教程介绍了如何使用Spark进行数据处理和分析。
Spark是一个开源的分布式计算框架,旨在通过内存计算以及并行处理来加速大规模数据处理任务。
首先,我们需要安装Spark并配置环境。
Spark支持多种编程语言,包括Scala、Java、Python和R。
可以根据自己的需求选择合适的语言。
一旦环境配置完成,我们可以开始使用Spark的核心概念,如Resilient Distributed Datasets(RDDs)。
RDDs是Spark的灵魂,它代表了分布在集群中的不可变的分区数据集。
我们可以通过RDDs进行数据的转换和操作。
Spark提供了丰富的操作和转换函数,如map、filter、reduce 等,可以对RDDs进行各种运算。
此外,Spark还支持一些高级函数,如join、groupByKey等,用于更复杂的数据处理和分析。
在实际应用中,我们可能需要从外部数据源加载数据,如文本文件、HDFS、数据库等。
Spark提供了用于读取和存储数据的API,可以轻松处理不同格式的数据。
除了RDDs,Spark还引入了DataFrame和Dataset,用于进行结构化数据的处理。
DataFrame是具有命名列的分布式数据集,类似于关系型数据库中的表。
Dataset是DataFrame的扩展,提供了类型安全的API。
Spark还支持常见的机器学习和图计算算法,如分类、回归、聚类、图计算等。
可以使用MLlib进行机器学习任务,使用GraphX进行图计算。
最后,我们需要注意Spark的调优和性能优化。
Spark提供了多种机制来提高作业的性能,如广播变量、累加器、数据分区等。
理解这些机制并进行适当的优化可以显著提升Spark作业的效率。
总结一下,Spark基础教程介绍了Spark的安装和环境配置,RDDs的基本概念和操作,DataFrame和Dataset的使用,以及机器学习和图计算的应用。
学习使用Scala进行大数据分析和处理的基本技巧第一章:Scala简介Scala(Scalable Language的缩写)是一种多范式编程语言,结合了面向对象编程和函数式编程的特性。
它的设计目标是集成对象和函数两种编程风格,提供高度的可扩展性和灵活性,适用于大数据分析和处理。
Scala的特点包括强大的类型推导、高级的模式匹配、高效的函数式编程能力、并行计算等。
它是一种与Java语言高度兼容的编程语言,可以无缝地与Java库进行集成,同时又提供了更加优雅和简洁的语法。
第二章:Scala基本语法学习使用Scala进行大数据分析和处理的基本技巧,首先需要了解Scala的基本语法。
Scala的语法结构类似于Java,但也有一些差异。
比如,Scala中的变量声明使用关键字var,而不是Java 中的关键字int、float等。
此外,Scala中的代码块使用大括号{}包围,而不是Java中的小括号()。
在Scala中,还有一些常见的语法结构,例如条件表达式、循环语句、函数定义等。
这些语法结构和Java中的用法类似,但具体的语法细节可能有所不同。
学习Scala的基本语法是使用Scala 进行大数据分析和处理的基础。
第三章:Scala集合框架在大数据分析和处理中,处理数据的基本单位是集合。
Scala提供了丰富的集合框架,包括列表、集合、映射等。
这些集合框架提供了丰富的API和函数,方便进行数据的操作和转换。
Scala集合框架的特点是不可变性,即一旦创建就不能被修改。
这种设计方式使得Scala的集合框架可以更好地与函数式编程风格结合,提供更加安全和高效的集合操作。
第四章:Scala的函数式编程能力函数式编程是Scala的一大特点。
函数不仅可以作为一等公民被传递和赋值,还可以作为参数和返回值被其他函数调用。
这种函数式编程的能力使得Scala可以更好地进行大数据分析和处理。
在函数式编程中,常见的操作有映射、过滤、折叠等。
第二章习题答案实训代码完整程序如下:文件studentinfo.txt的内容如图1所示,注意在Windows平台下将studentinfo.txt保存为UTF-8的格式。
图1 学生信息在Linux的/usr/local/project目录下创建文件studentinfo.txt,使用命令“touch studentinfo.txt”。
执行命令“vim studentinfo.txt”对文件进行编辑,按“i”进入编辑模式,输入图2-40所示内容,按“Esc”退出编辑状态,再执行命令“:wq”进行保存并退出。
在/usr/local/project目录下创建文件StudentInfo.scala,输入内容如下:import scala.io._import util.control.Breaks._object StudentInfo {var arrInfo:Array[String] = nulldef main(args: Array[String]) {//将/usr/local/project/studentinfo.txt的文件内容读入到数组中//一行为一个元素val lines = for(line <-Source.fromFile("/usr/local/project/studentinfo.txt").getLines) yield linearrInfo = lines.toArrayvar flag = trueshow()while(flag){print("请输入选择序号:")val choice = StdIn.readLine()breakable{if(!isIntByRegex(choice)) {//如果输入不是数字,则跳出本次循环println("请输入正确的序号")break}choice.toInt match {case 1 => {var maleCnt = count("男")println("三个班级共有男生" + maleCnt +"人")}case 2 => {var femalCnt = count("女")println("三个班级共有女生" + femalCnt +"人")}case 3 => {print("输入学号:")val studentId = StdIn.readLine()var mark = falsebreakable{for(i <- 0 until arrInfo.length){var info = arrInfo(i)val arr : Array[String] = info.split("\t")if(arr(1)== studentId){mark = trueprintln("班级\t学号\t姓名\t性别\t年龄\t籍贯\t电话")println(info)break //找到了学号,就跳出breakable,终止循环}}}if(!mark){println("查无此人")}}case 4 => {//按班级进行分组print("输入班级序号:")val classId = StdIn.readLine()println("班级\t学号\t姓名\t性别\t年龄\t籍贯\t电话")/*** 将arrInfo数组使用groupBy函数按照班级序号进行分组* 先将数组中的每个元素按照"\t"进行分割* 提取出分割后的第一个元素(即班级序号)* 按照班级序号进行分组,返回一个Map[String,Array[String]]类型 * 将返回值赋值给mapArr*/val mapArr = arrInfo.groupBy(x => x.split("\t")(0))for(maparr <- mapArr(classId)) println(maparr)}case 5 => {flag = falseprintln("再见!")}case _ => println("输入错误,请重新输入")}}}}//使用正则表达式判断字符串s是否为数字def isIntByRegex(s : String) = {val pattern = """^(\d+)$""".rs match {case pattern(_*) => truecase _ => false}}//展示功能页面def show() = {println("**************************************") println("1. 统计男生人数")println("2. 统计女生人数")println("3. 输入学号,打印出学生信息")println("4. 输入班级序号,打印出班级学生信息列表")println("5. 退出")println("**************************************") }//根据指定的信息统计人数def count(param: String): Int = {var sum = 0for(info <- arrInfo; if info.contains(param)){sum += 1}sum}}运行结果如图2-50所示。
利用Scala语言开发Spark应用程序park内核是由Scala语言开发的,因此使用Scala语言开发Spark应用程序是自然而然的事情。
如果你对Scala语言还不太熟悉,可以阅读网络教程A Scala Tutorial for Java Programmers或者相关Scala书籍进行学习。
AD:Spark内核是由Scala语言开发的,因此使用Scala语言开发Spark应用程序是自然而然的事情。
如果你对Scala语言还不太熟悉,可以阅读网络教程A Scala Tutorial for Java Programmers或者相关Scala书籍进行学习。
本文将介绍3个Scala Spark编程实例,分别是WordCount、TopK和SparkJoin,分别代表了Spark 的三种典型应用。
1. WordCount编程实例WordCount是一个最简单的分布式应用实例,主要功能是统计输入目录中所有单词出现的总次数,编写步骤如下:步骤1:创建一个SparkContext对象,该对象有四个参数:Spark master位置、应用程序名称,Spark安装目录和jar存放位置,对于Spark On Y ARN而言,最重要的是前两个参数,第一个参数指定为yarn-standalone ,第二个参数是自定义的字符串,举例如下:valsc=newSparkContext(args(0),WordCount ,System.getenv( SPARK_HOME ),Seq(System.getenv( SPARK_TEST_JAR )))步骤2:读取输入数据。
我们要从HDFS上读取文本数据,可以使用SparkConvaltextFile=sc.textFile(args(1))当然,Spark允许你采用任何Hadoop InputFormat,比如二进制输入格式SequenceFileInputFormat,此时你可以使用SparkContext中的hadoopRDD函数,举例如下:valinputFormatClass=classOf[SequenceFileInputFormat[Text,Text]]varhadoopRdd=sc.hadoopRDD(c onf,inputFormatClass,classOf[Text],classOf[Text])或者直接创建一个HadoopRDD对象:varhadoopRdd=newHadoopRDD(sc,conf,classOf[SequenceFileInputFormat[Text,Text,classOf[Text],c lassOf[Text])步骤3:通过RDD转换算子操作和转换RDD,对于WordCount而言,首先需要从输入数据中每行字符串中解析出单词,水草玛瑙 然后将相同单词放到一个桶中,最后统计每个桶中每个单词出现的频率,举例如下:valresult=hadoopRdd.flatMap{case(key,value)= value.toString().split( \\s+ }.map(word= (word,1)).reduceByKey(_+_)其中,flatMap函数可以将一条记录转换成多条记录(一对多关系),map函数将一条记录转换为另一条记录(一对一关系),高山茶 reduceByKey函数将key相同的数据划分到一个桶中,并以key为单位分组进行计算,这些函数的具体含义可参考:Spark Transformation。
Spark编程基础教学大纲课程内容包括大数据技术概述、Scala语言基础、Spark的设计与运行原理、Spark环境搭建和使用方法、RDD编程、Spark SQL、Spark Streaming和Spark MLlib 等。
课程概述Spark是当前热门的大数据处理技术,本课程重点介绍Spark的技术原理与编程方法。
课程由全国高校知名大数据教师厦门大学林子雨老师主讲,采用林子雨等编著的《Spark编程基础(Scala版)》作为课程教材。
Spark支持采用Scala、Java、Python和R语言进行编程,本课程采用Scala语言编写Spark应用程序。
课程内容包括大数据技术概述、Scala语言基础、Spark的设计与运行原理、Spark 环境搭建和使用方法、RDD编程、Spark SQL、Spark Streaming和Spark MLlib等。
通过本课程的学习,将帮助学生形成基础的Spark应用程序编程能力,为学生使用Spark技术解决实际科研问题和未来从事大数据相关工作奠定基础。
授课目标Spark是当前热门的大数据处理技术,本课程重点介绍Spark的技术原理与编程方法。
本课程采用Scala语言编写Spark应用程序。
课程内容包括大数据技术概述、Scala语言基础、Spark的设计与运行原理、Spark环境搭建和使用方法、RDD编程、Spark SQL、Spark Streaming和Spark MLlib等。
通过本课程的学习,将帮助学生形成基础的Spark应用程序编程能力,为学生使用Spark技术解决实际科研问题和未来从事大数据相关工作奠定基础。
课程大纲第1章大数据技术概述1.1 大数据时代1.2 大数据概念1.3 大数据的影响1.4 大数据关键技术1.5 大数据计算模式1.6 代表性大数据技术第1章大数据技术概述单元测验第2章Scala语言基础2.1 Scala语言概述2.2 Scala基础知识2.3 面向对象编程基础2.4 函数式编程基础第2章Scala语言基础单元测验第3章Spark的设计与运行原理3.1 Spark概述3.2 Spark生态系统3.3 Spark运行架构3.4 Spark的部署和应用方式第3章Spark的设计与运行原理单元测验第4章Spark环境搭建和使用方法4.1 安装Spark4.2 在spark-shell中运行代码4.3 开发Spark独立应用程序4.4 Spark集群环境搭建4.5 在集群上运行Spark应用程序第4章Spark环境搭建和使用方法单元测验第5章RDD编程5.1 RDD编程基础5.2键值对RDD5.3 数据读写5.4 综合案例第5章RDD编程单元测验第6章Spark SQL6.1 Spark SQL简介6.2 DataFrame6.3 从RDD转换得到DataFrame 6.4 使用Spark SQL读写数据库第6章Spark SQL单元测验第7章Spark Streaming7.1 流计算概述7.2 Spark Streaming7.3 DStream操作概述7.4 基本输入源7.5 高级数据源7.6 转换操作7.7 输出操作7.8 Structured Streaming第7章Spark Streaming单元测验第8章Spark MLlib8.1 Spark MLlib简介8.2 机器学习流水线8.3 特征抽取、转化和选择8.4 分类与回归第8章Spark MLlib单元测验预备知识本课程属于“进阶级”大数据课程,在学习本课程之前,建议首先学习由林子雨老师主讲的“入门级”大数据课程《大数据技术原理与应用》(点击这里在中国大学MOOC平台学习林子雨老师主讲的国家精品在线开放课程《大数据技术原理与应用》)。
Scala语言与Spark实践概述Scala语言是一种新兴的面向对象编程语言,它结合了Java语言的静态类型特征和函数式编程范式。
使用Scala语言可以更加快速地编写高效的代码。
而Spark是当前最流行的分布式计算框架之一,具有高可伸缩性、高效性、强大的数据处理能力等优点。
本文将探讨Scala语言与Spark实践的相关问题。
Scala语言介绍Scala语言全称为Scalable Language,是一种现代化、强类型的面向对象编程语言。
它由Martin Odersky于2004年开发,旨在提供一种更加高效的编程方式。
Scala语言融合了Java语言的优点,同时还支持函数式编程方式,使得代码更加简洁、易读、易扩展。
Scala语言在学术界、商业界都得到了广泛应用,已经成为了一种重要的编程语言。
Spark实践介绍Spark是目前最流行的Apache基金会的分布式计算框架,是一种高速、通用的计算引擎,具有高可伸缩性、高效性、强大的数据处理能力等优点。
Spark的核心是对于大数据的分布式计算,包括实时计算、短周期的批处理计算等。
Spark支持多种编程语言,包括Java、Scala、Python等。
Scala语言与Spark实践的结合Scala语言与Spark实践的结合可以带来很多优势。
Scala语言的静态类型特征可以使得代码更加可靠、易读,可以减少错误,提高代码的可维护性。
同时,Scala语言支持函数式编程方式,这种编程方式可以使得代码更加简洁、易读、易维护。
Spark框架适合处理海量数据,可以实现大数据量的处理,而Scala语言的高效性则可以更好地利用Spark框架的分布式处理能力。
Scala语言在Spark中的应用Scala语言与Spark的结合非常紧密,Spark支持Scala作为其主要编程语言之一。
Scala语言的一些特性可以使得在Spark框架下的编程更加方便。
比如Scala语言的隐式转换可以使得对于RDD的各种操作更加简洁、易读。
Spark基础知识详解Apache Spark是⼀种快速通⽤的集群计算系统。
它提供Java,Scala,和R中的⾼级API,以及⽀持通⽤执⾏图的优化引擎。
它还⽀持⼀组丰富的⾼级⼯具,包括⽤于SQL和结构化数据处理的Spark SQL,⽤于机器学习的MLlib,⽤于图形处理的GraphX和Spark Streaming。
Spark优点:减少磁盘I/O:随着实时⼤数据应⽤越来越多,Hadoop作为离线的⾼吞吐、低响应框架已不能满⾜这类需求。
HadoopMapReduce的map端将中间输出和结果存储在磁盘中,reduce端⼜需要从磁盘读写中间结果,势必造成磁盘IO成为瓶颈。
Spark允许将map端的中间输出和结果存储在内存中,reduce端在拉取中间结果时避免了⼤量的磁盘I/O。
Hadoop Yarn中的ApplicationMaster申请到Container后,具体的任务需要利⽤NodeManager从HDFS的不同节点下载任务所需的资源(如Jar包),这也增加了磁盘I/O。
Spark将应⽤程序上传的资源⽂件缓冲到Driver本地⽂件服务的内存中,当Executor执⾏任务时直接从Driver的内存中读取,也节省了⼤量的磁盘I/O。
增加并⾏度:由于将中间结果写到磁盘与从磁盘读取中间结果属于不同的环节,Hadoop将它们简单的通过串⾏执⾏衔接起来。
Spark把不同的环节抽象为Stage,允许多个Stage 既可以串⾏执⾏,⼜可以并⾏执⾏。
避免重新计算:当Stage中某个分区的Task执⾏失败后,会重新对此Stage调度,但在重新调度的时候会过滤已经执⾏成功的分区任务,所以不会造成重复计算和资源浪费。
可选的Shuffle排序:HadoopMapReduce在Shuffle之前有着固定的排序操作,⽽Spark则可以根据不同场景选择在map端排序或者reduce端排序。
灵活的内存管理策略:Spark将内存分为堆上的存储内存、堆外的存储内存、堆上的执⾏内存、堆外的执⾏内存4个部分。
实验十六Spark实验:Spark综例16.1 实验目的1.理解Spark编程思想;2.学会在Spark Shell中编写Scala程序;3.学会在Spark Shell中运行Scala程序。
16.2 实验要求实验结束后,能够编写Scala代码解决一下问题,并能够自行分析执行过程。
有三个RDD,要求统计rawRDDA中“aa”、“bb”两个单词出现的次数;要求对去重后的rawRDDA再去掉rawRDDB中的内容;最后将上述两个结果合并成同一个文件然后存入HDFS中。
16.3 实验原理16.3.1 ScalaScala是一门多范式的编程语言,一种类似java的编程语言,设计初衷是实现可伸缩的语言、并集成面向对象编程和函数式编程的各种特性。
Scala有几项关键特性表明了它的面向对象的本质。
例如,Scala中的每个值都是一个对象,包括基本数据类型(即布尔值、数字等)在内,连函数也是对象。
另外,类可以被子类化,而且Scala还提供了基于mixin的组合(mixin-based composition)。
与只支持单继承的语言相比,Scala具有更广泛意义上的类重用。
Scala允许定义新类的时候重用“一个类中新增的成员定义(即相较于其父类的差异之处)”。
Scala称之为mixin类组合。
Scala还包含了若干函数式语言的关键概念,包括高阶函数(Higher-Order Function)、局部套用(Currying)、嵌套函数(Nested Function)、序列解读(Sequence Comprehensions)等等。
Scala是静态类型的,这就允许它提供泛型类、内部类、甚至多态方法(Polymorphic Method)。
另外值得一提的是,Scala被特意设计成能够与Java和.NET互操作。
Scala可以与Java互操作。
它用scalac这个编译器把源文件编译成Java的class文件。
你可以从Scala中调用所有的Java类库,也同样可以从Java应用程序中调用Scala的代码。
scala程序设计课程标准以下是一个可能的Scala程序设计课程的标准:
课程目标:
1. 掌握Scala编程语言的基本语法和编程范式;
2. 掌握Scala中函数式编程的概念和技巧;
3. 掌握Scala中面向对象编程的概念和技巧;
4. 掌握Scala中并发编程的概念和技巧;
5. 了解Scala在Web开发、大数据处理等领域的应用。
课程大纲:
第一部分:Scala基础
1. Scala简介和安装配置
2. Scala基本语法和数据类型
3. 函数和函数式编程
4. 面向对象编程基础
5. 模式匹配和异常处理
6. 集合和流式处理
7. 泛型和类型系统
第二部分:Scala进阶
1. 高阶函数和闭包
2. 函数式编程技巧和不可变性
3. 面向对象编程进阶
4. 并发编程基础
5. Akka框架和Actor模型
6. 数据库交互和Web开发
7. 大数据处理和Spark框架第三部分:项目实践
1. 项目需求分析和设计
2. 项目开发和实现
3. 项目测试和调试
4. 项目演示和总结
课程评价:
1. 平时作业:根据课程进度布置相应的编程练习题,要求学生按时完成,并进行代码审查;
2. 期中考试:对学生掌握的Scala基础知识进行测试,要求达到一定的及格分数;
3. 期末考试:对学生掌握的Scala高级知识和应用进行测试,要求达到一定的及格分数;
4. 项目评价:对学生完成的实践项目进行评估,要求项目具有一定的功能性和创新性。
Scala编程1. 课程目标 (2)1.1. 目标1:(初级)熟练使用scala编写Spark程序 (2)1.2. 目标2:(中级)动手编写一个简易Spark通信框架 (3)1.3. 目标3:(高级)为阅读Spark内核源码做准备 (4)2. Scala概述 (4)2.1. 什么是Scala (4)2.2. 为什么要学Scala (4)3. Scala编译器安装 (5)3.1. 安装JDK (5)3.2. 安装Scala (5)3.2.1. Windows安装Scala编译器 (5)3.2.2. Linux安装Scala编译器 (9)3.2.3. Scala开发工具安装 (10)4. Scala基础 (14)4.1. 声明变量 (14)4.2. 常用类型 (15)4.3. 条件表达式 (15)4.4. 块表达式 (16)4.5. 循环 (16)4.6. 调用方法和函数 (17)4.7. 定义方法和函数 (18)4.7.1. 定义方法 (18)4.7.2. 定义函数 (18)4.7.3. 方法和函数的区别 (18)4.7.4. 将方法转换成函数(神奇的下划线) (20)5. 数组、映射、元组、集合 (20)5.1. 数组 (20)5.1.1. 定长数组和变长数组 (20)5.1.2. 遍历数组 (22)5.1.3. 数组转换 (22)5.1.4. 数组常用算法 (23)5.2. 映射 (23)5.2.1. 构建映射 (24)5.2.2. 获取和修改映射中的值 (24)5.3. 元组 (25)5.3.1. 创建元组 (25)5.3.2. 获取元组中的值 (25)5.3.3. 将对偶的集合转换成映射 (25)5.3.4. 拉链操作 (26)5.4. 集合 (26)5.4.1. 序列 (26)5.5. Set (28)5.6. Map (29)6. 类、对象、继承、特质 (32)6.1. 类 (33)6.1.1. 类的定义 (33)6.1.2. 构造器 (37)6.2. 对象 (40)6.2.1. 单例对象 (40)6.2.2. 伴生对象 (41)6.2.3. apply方法 (42)6.2.4. 应用程序对象 (43)6.3. 继承 (43)6.3.1. 扩展类 (43)6.3.2. 重写方法 (43)6.3.3. 类型检查和转换 (44)6.3.4. 超类的构造 (44)7. 模式匹配和样例类 (45)7.1. 匹配字符串 (45)7.2. 匹配类型 (45)7.3. 匹配数组、元组 (46)7.4. 样例类 (47)7.5. Option类型 (47)7.6. 偏函数 (48)1.课程目标1.1.目标1:(初级)熟练使用scala编写Spark程序/scala/scala_traits.html单词统计:sc.textFile("hdfs://spark1:9000/word.txt").flatMap(_.split("")).map(x=>(x,1)).reduceByKey(_+_).collect单词统计排序:sc.textFile("hdfs://spark1:9000/word.txt").flatMap(_.split("")).map(x=>(x,1)).reduceByKey(_+_).sortBy(_._2,false). collect结果保存起来:sc.textFile("hdfs://spark1:9000/word.txt").flatMap(_.split("")).map(x=>(x,1)).reduceByKey(_+_).saveAsTextFile("hdfs://spark1:9000/usr/out")1.2.目标2:(中级)动手编写一个简易Spark通信框架1.3.目标3:(高级)为阅读Spark内核源码做准备2.Scala概述2.1.什么是ScalaScala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。
Spark实践——⽤Scala和Spark进⾏数据分析本⽂基于《Spark ⾼级数据分析》第2章⽤Scala和Spark进⾏数据分析。
完整代码见1.获取数据集数据集来⾃加州⼤学欧⽂分校机器学习资料库(UC Irvine Machine Learning Repository),这个资料库为研究和教学提供了⼤量⾮常好的数据源,这些数据源⾮常有意义,并且是免费的。
我们要分析的数据集来源于⼀项记录关联研究,这项研究是德国⼀家医院在 2010 年完成的。
这个数据集包含数百万对病⼈记录,每对记录都根据不同标准来匹配,⽐如病⼈姓名(名字和姓⽒)、地址、⽣⽇。
每个匹配字段都被赋予⼀个数值评分,范围为 0.0 到 1.0,分值根据字符串相似度得出。
然后这些数据交由⼈⼯处理,标记出哪些代表同⼀个⼈哪些代表不同的⼈。
为了保护病⼈隐私,创建数据集的每个字段原始值被删除了。
病⼈的 ID、字段匹配分数、匹配对标⽰(包括匹配的和不匹配的)等信息是公开的,可⽤于记录关联研究下载地址:1. (需FQ)2. (已解压,block_1.csv 到 block_10.csv)2.设置Spark运⾏环境,读取数据读取数据集3.处理数据⾸先按 is_match 字段聚合数据,有两种⽅式可以进⾏数据聚合,⼀是使⽤ groupby 函数,⼆是使⽤ Spark Sql之后使⽤ describe 函数获取每个字段的最值,均值等信息// 获取每⼀列的最值,平均值信息val summary = parsed.describe()summary.show()summary.select("summary", "cmp_fname_c1", "cmp_fname_c2").show()按此⽅式获取匹配记录和不匹配记录的 describe// 获取匹配和不匹配的信息val matches = parsed.where("is_match = true")val misses = parsed.filter($"is_match" === false)val matchSummary = matches.describe()val missSummary = misses.describe()matchSummary .show()missSummary .show()可以看到这个数据不⽅便进⾏操作,可以考虑将其转置,⽅便使⽤sql对数据进⾏分析。