第5课:零基础实战Scala函数式编程及Spark源码解析

本文介绍了Scala语言中函数式编程的基本概念与实践技巧,包括函数定义、参数传递方式、默认参数值、变长参数及函数序列化等内容,并通过实例演示了如何在Scala中灵活运用这些特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本课内容
1.零基础实战Scala函数式编程入门
2.Spark源码中的Scala函数式编程鉴赏
 ------------------------------------------------------------------------------------------------------------------------
/**
 * 函数可以被简单的被认为是包裹了一条或几条语句的代码体,
 * 该代码体接收若干参数,经过代码体处理后返回结果,
 * 刑如数学中的f(x) = x + 1
 * 
 * 在Scal中函数式一等公民,可以像变量一样被传递,被赋值,同时
 * 函数可以赋值给变量,变量也可以赋值给函数,之所以可以是这样
 * 原因在与函数背后是类和对象,也就是说在运行的时候函数其实是一个变量
 * 当然,背后的类是Scala语言帮我们生成的,且可以天然的被序列号和反序列化,
 * 这个意义是非常重要的:
 * 意义1:可以天然的序列化和反序列化的直接好处就是函数可以在分布式系统上传递 
 * 意义2:因为函数背后是类和对象,所以可以和普通变量完全一样的应用在任何
 * 普通变量可以运用的地方,包括作为参数传递,作为返回值,被变量赋值和赋值给变量等
 * 
 * 补充:整个IT编程技术的发展史,其实就是一部封装史:
 * 1.Function时代:在C语言中提供了函数的概念,用函数把若干条语句进行封装和复用
 * 2.Class时代:在C++和Java等语言中提供给了类和对象,把数据和处理数据业务逻辑封装起来
 * 3.框架时代:把数据、代码和驱动引擎封装起来,是过去10年和未来10年IT技术的核心
 * 
 * 关于函数初级入门的几个要点:
 * 1.def关键字来定义函数
 * 2.函数会自动进行类型推导来确定函数返回值的类型,如果函数名称和函数体之间没有等于号
 * 的话则类型推导失效,此时函数的类型是Unit
 * 3.函数的参数可以使函数 
 * 4.如果在函数中无法推导出类型的函数,则必须声明具体的类型,例如下面的fibnacci
 * 5.函数的参数可以有默认值,这样在调用函数的时候如果不想改变默认值的话就直接不传递
 * 该参数而直接使用默认值即可,这在实际的编程中意义重大,尤其实在Spark等框架中,因为
 * 框架一般都有自己的默认配置和实现,此时我们就可以非常好的使用默认值
 * 6.我们可以基于函数的参数的名称来调整函数的传递参数的顺序,重点在于为什么可以这么做呢?
 * 原因:在于函数背后其实是类,其参数就是类的成员,所以无所谓
 * 7.函数中如果不确定传递参数的个数,可以使用变长参数的方式:传参时候的一个方便的语法是: _*
 * 8.可变参数中的数据其实会被收集成为Array数组,我们在入口方法main中其实就是可变参数,
 * 是以Array[String]的方式呈现的
 */  
object C5 {
  
  def main(args: Array[String]): Unit = {
        hello("Spark",29)
        //函数的参数可以是函数
        println(hello("zhangs",18))
        
        println("fibonacci of 10="+fibonacci(10))
        
        //函数的参数可以有默认值
        println(hello2("lisi"))
        //基于函数的参数的名称来调整函数的传递参数的顺序
        hello2(age=13,name="xxx")
        
        //可变参数,如果加100就很麻烦
        println("Sum= "+sum(1,2,3,4,5,6,7,8,9,10))
        println("Sum2= "+sum(1 to 10: _*))
        
        println("sumrecursive= "+sumrecursive(1 to 10: _*))
  }
  
  def hello(nameString,age:Int)={
     println("Hello,my names is "+name)
     println("Hello,my age is "+age)
     age
  }
  
  //带默认值age
  def hello2(nameString,age:Int = 30)={
     println("Hello,my names is "+name)
     println("Hello,my age is "+age)
     age
  }
  
  def fibonacci(n:Long):Int={
     if(n <= 1)1
     else fibonacci(n-2)+fibonacci(n-1)
  }
  
  def sum(numbers:Int*)={
      var result = 0
      for(number <- numbers){
         result += number
      }
      result
  }
  
  def sumrecursive(numbers:Int*):Int={
     if(numbers.length == 0)0
     else numbers.head+sumrecursive(numbers.tail: _*)
  }
    
}  
上百节详细讲解,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 本程主要讲解的内容包括:Scala编程、Hadoop与Spark集群搭建、Spark核心编程Spark内核源码深度剖析、Spark性能调优、Spark SQL、Spark Streaming。 本程的最大特色包括: 1、代码驱动讲解Spark的各个技术点(绝对不是照着PPT空讲理论); 2、现场动手画图讲解Spark原理以及源码(绝对不是干讲源码和PPT); 3、覆盖Spark所有功能点(Spark RDD、Spark SQL、Spark Streaming,初级功能到高级特性,一个不少); 4、Scala全程案例实战讲解(近百个趣味性案例); 5Spark案例实战的代码,几乎都提供了Java和Scala两个版本和讲解(一次性同时精通Java和Scala开发Spark); 6、大量全网唯一的知识点:基于排序的wordcount,Spark二次排序,Spark分组取topn,DataFrame与RDD的两种转换方式,Spark SQL的内置函数、开窗函数、UDF、UDAF,Spark Streaming的Kafka Direct API、updateStateByKey、transform、滑动窗口、foreachRDD性能优化、与Spark SQL整合使用、持久化、checkpoint、容错与事务。 7、多个从企业实际需求抽取出的复杂案例实战:每日uv和销售额统计案例、top3热卖商品统计案例、每日top3热点搜索词统计、广告计费日志实时黑名单过滤案例、热点搜索词滑动统 计案例、top3热门商品实时统计案例 8、深度剖析Spark内核源码Spark Streaming源码,给源码进行详细的注释和讲解(史上最细致源码讲解) 9、全面讲解SparkSpark SQL、Spark Streaming的性能调优,其中包括全网唯一的Shuffle性能调优(详细讲解性能调优的各个技术点) 10、涵盖Spark两个重要版本,Spark 1.3.0和Spark 1.5.1的讲解(走在Spark最前沿,涵盖最新高级特性) 一、Scala编程详解 二、程环境搭建 三、Spark核心编程 四、Spark内核源码深度剖析 五、Spark性能优化 六、Spark SQL 七、Spark Streaming
第1章,“可伸展的语言”,给出了Scala的设计,和它后面的理由,历史的概要。 第2章,“Scala的第一步”,展示给你如何使用Scala完成若干种基本编程任务,而不牵涉过多关于如何工作的细节。本章的目的是让你的手指开始敲击并执行Scala代码。 第3章,“Scala的下一步”,演示更多的基本编程任务来帮助你更快速地上手Scala。本章之后,你将能够开始在简单的脚本任务中使用Scala。 第4章,“类和对象”,通过描述面向对象语言的基本建设模块和如何编译及运行Scala程序的教程开始有深度地覆盖Scala语言。 第5章,“基本类型和操作”,覆盖了Scala的基本类型,它们的文本,你可以执行的操作,优先级和关联性是如何工作的,还有什么是富包装器。 第6章,“函数式对象”,进入了Scala面向对象特征的更深层次,使用函数式(即,不可变)分数作为例子。 第7章,“内建控制结构”,显示了如何使用Scala的内建控制结构,如,if,while,for,try和match。 第8章,“函数和闭包”,深度讨论了函数式语言的基础建设模块,函数。 ...... 第31章,“组合子解析”,显示了如何使用Scala解析器组合子库来创建解析器。 第32章,“GUI编程”,展示了使用Scala库简化基于Swing的GUI编程的快速旅程。 第33章,“SCell电子表”,通过展示一个完整的电子表的实现,集中演示了Scala的一切。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值