大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法
具体见第三阶段scala-day01中的文档(scala编程基础---基础语法)
1. 函数式编程(https://www.cnblogs.com/wchukai/p/5651185.html):
- 将业务逻辑细化,抽象,封装成一个个功能函数,并借助语言自带的高阶函数api,将整个业务流程转化为函数之间的相互调用,这就是函数式编程。
我们可以看到,函数式编程中,函数不仅直接调用,也可以当成参数被其他函数调用。因此,进一步,如果我不仅想把函数当参数,还想传入值,所以再封装一下,函数和值封装后是什么。
- 函数->行为
- 值->属性
没错这就是对象
- 将业务逻辑细化,抽象,封装成一个个对象,并借助语言,库,组件,框架等,将整个业务流程转化为对象之间的相互调用,这就是面向对象编程。
因此,这么看来,函数式跟面向对象的思想其实都是一致的,即对逻辑的抽象与封装。
原点:
回顾下语言的历程
过程式->函数式->面向对象
近年来大数据的兴起,数据的处理往往跟面向对象没关系,更多的是简单而大量的数据结构,借助mapreduce这样的高阶函数处理更加方便,这也是函数式编程又火起来的原因。
程序只不过是回到了它的原点:
算法+数据结构->函数+高阶函数+数据。
下面笔记来源:https://www.zhihu.com/question/28292740















2. for 循环
(1) 重点:守卫模式和推导式
- 守卫模式
for(i <- 1 to 10 if i >3){满足条件的执行此逻辑}
- 推导式
def main(args: Array[String]): Unit = {
val arr = Array(1, 2, 3, 4, 6, 5)
val new_arr = for(i <- arr if i >3) yield i*2 //推导式
println(new_arr.toBuffer)
}
}
(2)可变参数
/**
* 可变参数
*/ object Demo2 {
def main(args: Array[String]): Unit = {
operation("hello","spark","hadoop","flink")
}
def operation(s:String*): Unit ={
s.foreach(x=>println(x))
}
}
(3)三种遍历模式如下:
- 第一种:相当于java中的增强for循环
// 第一种:增强for循环的遍历方式
val arr = Array(1, 2, 3, 4, 6, 5)
for (elem <- arr) {
println("第一种遍历方式:"+elem)
}
- 第二种:角标索引的方式
// 第二种:角标索引的方式
for (index <- arr.indices) { // 此处的arr.indices相当于:0 util arr.length
println("第二种遍历方式:"+arr(index))
}
- 第三种:调用foreach方法,此种适合校验
// 第三种:调用foreach方法,此种适合校验
arr.foreach(e=>print("第三种遍历方式:"+e))
}
3. 数组中常用的方法
* 1 update(index,newVal) 更新元素
* -------2 reverse 空参的方法 将数组反转
* 3 reduce 每个元素累计操作 聚合操作
* 4 max 获取数组中的最大元素
* 5 min 获取数组中最小的元素
* -------6 sorted 将数组中的元素按照默认的排序 数值(小--->大) 字符串(字段的先后排序) 自定义的类???
* 7 exists 判断是否有符合要求的元素
* 8 drop(num) 从0的位置删除n个元素(dropright(num)表示从尾部删除n个元素)
* -------9 distinct 去除数组中重复的元素
* -------10 sum 求和
* -------11 map 遍历数组中的每个元素 分别处理 将处理的结果返回到一个新的数组中(map(f:Int=>B) map(f:String=>{}) B block,即为代码块)
* -------12 foreach 遍历数组中的每个元素 没有返回值 一般用于打印(foreach[U](f:Int=>U),此处的U即为Unit)
* -------13 contains(elem) 判断数组中是否包含某个元素
* -------数组的定义
* -------数组的遍历
*/
大数据学习day13------第三阶段----scala01-----函数式编程。scala以及IDEA的安装,变量的定义,条件表达式,for循环(守卫模式,推导式,可变参数以及三种遍历方式),方法定义,数组以及集合(可变和非可变),数组中常用的方法的更多相关文章
- 大数据学习--day13(字符串String--源码分析--JVM内存分析)
字符串String--源码分析--JVM内存分析 String 类的对象 , 是不可变的字符串对象呢 这个不可变很重要,之后要讲的intern()也离不开它的不可变性. https://www.cnb ...
- 大数据学习day32-----spark12-----1. sparkstreaming(1.1简介,1.2 sparkstreaming入门程序(统计单词个数,updateStageByKey的用法,1.3 SparkStreaming整合Kafka,1.4 SparkStreaming获取KafkaRDD的偏移量,并将偏移量写入kafka中)
1. Spark Streaming 1.1 简介(来源:spark官网介绍) Spark Streaming是Spark Core API的扩展,其是支持可伸缩.高吞吐量.容错的实时数据流处理.Sp ...
- 大数据学习笔记——Java篇之集合框架(ArrayList)
Java集合框架学习笔记 1. Java集合框架中各接口或子类的继承以及实现关系图: 2. 数组和集合类的区别整理: 数组: 1. 长度是固定的 2. 既可以存放基本数据类型又可以存放引用数据类型 3 ...
- 大数据学习(一) | 初识 Hadoop
作者: seriouszyx 首发地址:https://seriouszyx.top/ 代码均可在 Github 上找到(求Star) 最近想要了解一些前沿技术,不能一门心思眼中只有 web,因为我目 ...
- 大数据学习笔记——Linux完整部署篇(实操部分)
Linux环境搭建完整操作流程(包含mysql的安装步骤) 从现在开始,就正式进入到大数据学习的前置工作了,即Linux的学习以及安装,作为运行大数据框架的基础环境,Linux操作系统的重要性自然不言 ...
- 大数据学习day29-----spark09-------1. 练习: 统计店铺按月份的销售额和累计到该月的总销售额(SQL, DSL,RDD) 2. 分组topN的实现(row_number(), rank(), dense_rank()方法的区别)3. spark自定义函数-UDF
1. 练习 数据: (1)需求1:统计有过连续3天以上销售的店铺有哪些,并且计算出连续三天以上的销售额 第一步:将每天的金额求和(同一天可能会有多个订单) SELECT sid,dt,SUM(mone ...
- 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机)
引言 在大数据学习系列之一 ----- Hadoop环境搭建(单机) 成功的搭建了Hadoop的环境,在大数据学习系列之二 ----- HBase环境搭建(单机)成功搭建了HBase的环境以及相关使用 ...
- 大数据学习系列之五 ----- Hive整合HBase图文详解
引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...
- 大数据学习系列之六 ----- Hadoop+Spark环境搭建
引言 在上一篇中 大数据学习系列之五 ----- Hive整合HBase图文详解 : http://www.panchengming.com/2017/12/18/pancm62/ 中使用Hive整合 ...
随机推荐
- Forest v1.5.12 发布,声明式 HTTP 框架,已超过 1.6k star
Forest介绍 Forest 是一个开源的 Java HTTP 客户端框架,它能够将 HTTP 的所有请求信息(包括 URL.Header 以及 Body 等信息)绑定到您自定义的 Interfac ...
- vim 脚本,自动添加文件头部信息
相信很多人编写脚本的时候都会在脚本头部写一些信息,记录文件生成时候,生成人姓名等 建议在自己的家目录下的 .vimrc 文件 下添加以下内容 [ autocmd BufNewFile *.sh exe ...
- 【python】使用python十分钟创建个人聊天机器人教程
以青云客和图灵机器人接口示范python创建个人聊天机器人教程 一.以青云客聊天机器人为例示范get请求 官方网址:http://api.qingyunke.com/ 1.接入指引 请求地址 http ...
- Java多线程| 01 | 线程概述
Java多线程| 01 | 线程概述 线程相关概念 进程与线程 进程:进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是操作系统进行资源分配与调度的基本单位.可以把进程简单的理解 ...
- 大爽Python入门教程 0-4 安装Pycharm
大爽Python入门公开课教案 点击查看教程总目录 安装重量级IDE--Pycharm 一 下载 下面步骤1,2中网络卡顿的朋友, 请直接前往步骤3来下载. 使用搜索引擎搜索Pycharm, 打开搜索 ...
- 基于EPPlus和NPOI实现的Excel导入导出
基于EPPlus和NPOI实现的Excel导入导出 CollapseNav.Net.Tool.Excel(NuGet地址) 太长不看 导入 excel 文件流将会转为 ExcelTestDto 类型的 ...
- List<Object>
... package str; import java.util.ArrayList; import java.util.List; public class arrayText { public ...
- Nginx支持WebSocket反向代理
WebSocket是目前比较成熟的技术了,WebSocket协议为创建客户端和服务器端需要实时双向通讯的webapp提供了一个选择.其为HTML5的一部分,WebSocket相较于原来开发这类app的 ...
- 14-2-Unsupervised Learning ----Word Embedding
Introduction 词嵌入(word embedding)是降维算法(Dimension Reduction)的典型应用 那如何用vector来表示一个word呢? 1-of-N Encodin ...
- 《手把手教你》系列技巧篇(四十四)-java+ selenium自动化测试-处理https 安全问题或者非信任站点-下篇(详解教程)
1.简介 这一篇宏哥主要介绍webdriver在IE.Chrome和Firefox三个浏览器上处理不信任证书的情况,我们知道,有些网站打开是弹窗,SSL证书不可信任,但是你可以点击高级选项,继续打 ...