Hadoop+Spark大数据技术(微课版)曾国荪、曹洁版思维导图第五次作业 第五章 Scala基础与编程

本文主要是介绍Hadoop+Spark大数据技术(微课版)曾国荪、曹洁版思维导图第五次作业 第五章 Scala基础与编程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

  • 第五次作业

    • 1. 简述Scala语言的基本特性

      • 1. 面向对象:Scala是一种完全面向对象的语言。其每一种数据类型都是一个对象,这使得它具有非常统一的模型。

      • 2. 函数式编程:Scala同时支持函数式编程,它拥有高阶函数、闭包、不可变数据结构、递归等函数式编程的关键特性。

      • 3. 扩展性:Scala的语法非常灵活,允许开发者自定义运算符和语法糖。也支持模式匹配、类型推断和匿名函数等高级特性,这些都为编写简洁、高效的代码提供了可能。此外,Scala的语法允许在单个文件中定义类、对象、函数等,使得代码组织更加灵活。

      • 4. 并发性:Scala支持Actor模型(处理并发的轻量级机制)。通过Actor,可以编写出线程安全的、易于管理的并发代码,有效地利用多核处理器资源。

      • 5. 可以和Java混编:Scala运行在Java虚拟机(JVM)上,并兼容Java的API。可以直接使用Java库,或者在Scala代码中调用Java方法,反之亦然。这为已有的Java项目提供了无缝迁移到Scala的可能,也使得Scala成为一个非常实用的工具,可以在不完全重构的情况下逐步引入新的编程范式。

    • 2. 简述Scala语言的9种基本数据类型。 说明关键字Unit、Nothing、Any的含义。

      • Unit无返回值,通常用于不返回任何内容的方法。

      • Nothing是任何其他类型的子类,用于表示永远不会正常终止的程序部分。

      • Any是所有其他类型的超类(父类)

    • 3. 简述Scala中数组、列表、集合、元组、映射的名称及特点。

      • 数组(Array):固定大小的集合,元素类型相同,性能较好但不支持动态修改大小。

      • 列表(List):不可变的序列集合,适合于递归处理和模式匹配,但头部插入和删除效率低。

      • 集合(Set):无序且不重复元素的集合,分为可变和不可变两种。

      • 元组(Tuple):固定长度、不同类型的元素组合,最多支持22个元素,常用于同时携带多种类型信息。

      • 映射(Map):键值对的集合,键唯一,分为可变和不可变两种,适合快速查找。

    • 4. 举例说明匿名函数和高阶函数的含义,

      • 匿名函数

        • 也称为Lambda函数。箭头“=>”定义,箭头的左边是参数列表,箭头的右边是表达式,表达式的值即匿名函数的返回值。 在代码中直接定义的函数,没有具体的函数名。通常用于一些简单的、一次性的操作。

          • val sum = (x: Int, y: Int) => x + y

          • val result = sum(3, 5) /

          • / result = 8

      • 高阶函数

        • 高阶函数是指使用其他函数作为参数,或者返回一个函数作为结果的函数。

          • val numbers = List(1, 2, 3, 4)

          • val doubled = numbers.map(x => x * 2)

          • // doubled = List(2, 4, 6, 8)

    • 5. 阅读、分析下列程序段,并给出运行结果。

      (1)       var v = 0for (i <- 1 to 9) {for (j <- 1 to i) {v = i*jprint(f"$j%s*$i%s=$v%-3s")}println()}
      (2)          val a = Array("Hello Spark","Hello Hadoop","Hello Scala")val b = a.flatMap(_.split(" ")).map((_,1)).groupBy(t => t._1).map(t => (t._1,t._2.length)).toList.sortBy(t => t._2).reverseb.foreach(x => println(x))
      (3)       class Person(val namec:String,val agec:Int) {var name:String = namecvar age:Int = agecdef printPerson() : Unit = {printf(f"name:$name%8s, age:$age%-4d")}}object Test2 {def main(args:Array[String]):Unit = {val x = new Person("zhang",21)x.printPerson()}}
      (4)        val a = List(("a",85),("b",95),("c",75),("a",95))a.groupBy(_._1)
      (5)       val s = List("Spark","Python","Hadoop","HBase")s.foreach(e => print(e+" "))print(s.count(e => e.length == 5))
      (1) 九九乘法表
      这段代码使用嵌套循环打印九九乘法表。外层循环控制行数,内层循环控制每行打印的乘法算式。
      运行结果:
      ```
      1*1=1   
      1*2=2   2*2=4   
      1*3=3   2*3=6   3*3=9   
      ...
      1*9=9   2*9=18  3*9=27  ... 8*9=72  9*9=81  
      ```(2) 单词计数
      这段代码统计字符串数组中每个单词出现的次数,并按出现次数降序排列。
      步骤解析:
      1. `flatMap(_.split(" "))`:将每个字符串按空格分割成单词列表,并合并成一个新的列表。
      2. `map((_,1))`:将每个单词映射成一个元组,元组的第一个元素是单词本身,第二个元素是 1。
      3. `groupBy(t => t._1)`:按照单词分组。
      4. `map(t => (t._1,t._2.length))`:统计每个单词出现的次数。
      5. `toList.sortBy(t => t._2).reverse`:将结果转换为列表,并按出现次数降序排列。
      运行结果:
      ```
      (Hello,3)
      (Spark,1)
      (Scala,1)
      (Hadoop,1)
      ```(3) 类定义与对象创建
      这段代码定义了一个 `Person` 类,并创建了一个 `Person` 对象,然后调用该对象的 `printPerson` 方法打印信息。
      运行结果:
      ```
      name:zhang    , age:21  
      ```(4) 按第一个元素分组
      这段代码将列表 `a` 按照元组的第一个元素分组。
      结果:
      ```
      Map(a -> List((a,85), (a,95)), b -> List((b,95)), c -> List((c,75)))
      ```(5) 字符串操作
      这段代码遍历字符串列表 `s` 并打印每个元素,然后统计长度为 5 的字符串个数。
      运行结果:
      ```
      Spark Python Hadoop HBase 2
      ``` 
      

这篇关于Hadoop+Spark大数据技术(微课版)曾国荪、曹洁版思维导图第五次作业 第五章 Scala基础与编程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/945474

相关文章

学习笔记-C语言1(编程入门)

目录 1. 文件开头 2. 输入输出 3. 定义常量 4.  变量的类型和转换说明符 5.  关系运算符和逻辑运算符及优先级 6. if 语句、switch语句、for 语句 7.递增与递减云算法 8. 算法设计入门 9. 哥德巴赫猜想 C语言和C++是作为一名程序员必备技能,非科班出身的我对这些语言一直是一知半解,后来更是直接使用简单易上手的python,matlab语言

【前端每日基础】day9——函数的定义

在 JavaScript 中,函数可以通过两种方式来定义:函数声明和函数表达式。 函数声明:使用 function 关键字直接声明函数,后面跟着函数名和函数体。函数声明语句不是一个完整的语句,但是会被 JavaScript 解析器提升(hoist)到当前作用域的顶部,因此可以在声明之前调用。 function myFunction() {// 函数体} 函数表达式:将函数赋值给变量,函数可

如何完美实现文件外发防泄漏,保护核心数据资产?

不管是大型企业,还是小型创业公司,不论企业规模大小,每天都会有大量的文件要进行内部传输协作和对外发送使用,数据的生产也是企业业务生产力的体现之一。因此文件外发防泄漏是企业信息安全中的一个重要议题,为了防止企业敏感信息的泄露,企业可以采取以下一些措施: 权限管理:设置严格的文件访问权限,确保只有授权人员才能访问敏感文件。 数据加密:对敏感文件进行加密处理,即使文件被非法获取,也无法轻易读取内容。

MATLAB基础应用精讲-【数模应用】折半信度分析

目录 前言 几个高频面试题目 量表折半信度到底是拆分题目还是拆分受访者为两半?

如何选择高效可靠的数据实时同步软件?

在以下场景中,会需要用到数据实时同步软件,以确保数据的一致性和实时性: 1、多数据中心操作:在拥有多个数据中心的企业中,为了保持数据一致性和业务连续性,需要实时同步跨数据中心的数据。 2、分布式系统:在分布式数据库或微服务架构中,为了保持不同服务或数据库节点之间的数据一致性,实时同步是关键。 3、灾难恢复和备份:实时数据同步可以用于灾难恢复,确保在主数据库发生故障时,备份数据库能够快速接管服

2024深圳杯数学建模C题参考论文24页+完整代码数据解题

一、问题研究 24页参考论文: 【编译器识别】2024深圳杯C题24页参考论文+1-3小问完整解题代码https://www.jdmm.cc/file/2710545/ 为了回答这些问题,我们需要进行一系列的编译实验、分析编译结果,并构建判别函数。以下是对这些问题的初步分析和可能的方法: 问题1:编译并对比结果 1.获取不同版本的GCC编译器:首先,需要确保安装了不同版本的GCC编译

【极客时间】小马哥讲 Spring 核心编程思想 [250讲] [96G]

01 课程介绍 小马哥讲 Spring 核心编程思想,由乐学编程课堂网整理发布完结无密版。本课带你系统讲解Spring Framework 核心技术,深耕原理拆解Spring核心知识点,由浅入深拆解Spring Framework 核心思想、设计思维,以及实现,通过讲解编程模型、设计思想以及技术规范,站在哲学的高度,分析和猜想 Spring 的实现可能,让你逐一击破Spring重难点问题,并围绕

精益技术简历之道:改善技术简历的47条原则

关于 这篇文章围绕着技术简历这个话题,从版式、个人信息、技术能力、项目经历和教育背景等方面出发,给出了编写高质量技术简历所应遵循的47条原则。它们既有益于求职者编写高质量的简历,也有助于招聘者筛选合格的求职者。 为什么要编写这篇文章? 技术简历既是技术人员求职必不可少的一环,也是找工作的第一步,其重要性不言而喻。然而关于如何编写技术简历的靠谱教程却少之又少,以至于求职者无法编写出合格的简历,

算法学习笔记(4)-基础排序算法

##O(n^2)算法时间复杂度的排序算法 目录 ##O(n^2)算法时间复杂度的排序算法 ##选择排序 ##原理 ##图例 ##代码实现示例 ##冒泡排序 ##原理 ##图例 ##代码实现示例 ##插入排序 ##原理 ##图例 ##代码实现示例 ##总结  ##选择排序 ##原理 在一个无序的数组或者列表中,从第一个元素到最后一个元素中选择一个最小的元

使用albumentations进行数据增强保存图像

import cv2import numpy as npimport albumentations as Afrom albumentations.pytorch import ToTensorV2# 读取图片image = cv2.imread("test_2_0000_0000.png")image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)#