第6课 :零基础实战Scala集合操作及Spark源码解析

大数据Spark实战高手之路职业学习路线图 从零起步,分阶段无任何障碍逐步掌握大数据统一计算平台Spark,从Spark框架编写和开发语言Scala开始,到Spark企业级开发,再到Spark框架源码解析、Spark与Hadoop的融合、商业案例和企业面试,一次性彻底掌握Spark,成为云计算大数据时代的幸运儿和弄潮儿,笑傲大数据职场和人生! 学习目标: 1、掌握Scala; 2、精通Spark企业及开发; 3、精通Spark框架源... 阅读详情
本课内容
1.Spark中Scala集合操作鉴赏
2.Scala集合操作实战
 ------------------------------------------------------------------------------------------------------------------------

/**
 * 大数据技术是数据的集合以及对数据集合的操作技术的统称,具体来说:
 * 1.数据集合:会涉及数据的搜集、存储等,搜集会有很多技术,存储现在比较经典的是使用Hadoop,
 * 也有很多情况使用Kafka(消息中间件,也可以作为存储系统)
 * 2.对数据集合的操作技术:目前全球最火爆的是Spark
 * 
 * Spark的框架实现语言是Scala,首选的应用程序开发语言也是Scala,所以Scala对集合以及集合
 * 操作的支持就至关重要,且必须异常强大
 * 一个补充说明:可能是巧合,Spark中对很多数据的操作算子和Scala中对集合的操作算子是一模一样的,
 * 也就是说你掌握了Scala中集合的操作,基本上就可以直接去开发Spark代码啦,非常美妙
 * 
 * 关于Scala中数据的创建与操作:
 * 1.最最原始的创建数据的方式是形如val array = new Array[Int](5),
 * 指定数组的类型Int且其固定长度是5个
 * 2.对数组元素访问的时候,下标的范围在0到length-1的长度,
 * 超过length-1的话,会出现数组越界异常:java.lang.ArrayIndexOutOfBoundsException
 * 3.最常用和经典的创建数组的方式是形如:Array[Int](1,2,3,4,5),直接通过Array类名并传入参数
 * 的方式来创建数组实例,在背后的实现是调用Array的工厂方法模式apply来构建出数组及数组的内容
 * 4.关于Array本身是在底层的实现是借助了JVM平台上的Java语言的数组的实现,是不可变的
 * 5.如果我们想使用可变数组的话,首先需要导入import scala.collection.mutable.ArrayBuffer,
 * 然后使用ArrayBuffer这个可变数组
 * 6.关于ArrayBuffer增加元素默认情况下都是在ArrayBuffer末尾增加元素的,效率非常高
 * 7.当需要多线程并发操作的时候,把ArrayBuffer转换成Array就非常重要。其实,即使是Array,
 * 其本身虽然不可变动(元素可删减),但我们可以修改Array中每个元素的内容,所以多线程操作的
 * 时候必须考虑并发写的问题,如果是读的话就没关系
 * 8.如果想在已经有的数组的基础上通过作用于每个元素来生成新的元素构成的新数组,
 * 则可以通过yield语法来完成,这在大数据中意义重大:
 * 第一点:它是在不修改已经有的Array的内容的基础上来完成的,非常适合大数据处理
 * 第二点:在大数据中处理中,例如Spark中业务操作的核心思想就类似于yield,来通过
 * function对每个元素操作获得新的元素构成的新的集合,其实就是新的RDD,
 * 例如MapPartionsRDD
 * 9.集合的操作往往可以通过丰富的操作算子,例如filter来过滤需要条件的元素,例如
 * map来进行每一个元素的加工
 * 
 */ 
object C6 {
  
  
    def main(args: Array[String]): Unit = {
      
      //val array = new Array[Int](5); //创建数组长度为5
      
      //Scala中最正统定义数组方式,在背后的实现是调用Array的工厂方法
        //模式apply来构建出数组及数组的内容
      //val array = Array[Int](1,2,3,4,5)  
      
      //在这里可以去掉[Int]这个泛型类型,是因为Scala有类型推导能力,而我们已经传
        //入了当前数组Array的值,所以可以根据值来推导出类型
      val array = Array.apply(1,2,3,4,5) 
      
      array(0) = 10 //数据的索引下标是从0开始的
      //array(5) = 1 //数组下标越界异常:java.lang.ArrayIndexOutOfBoundsException
      for(item <- array){
         println(item)
      }
      
      
      val names = Array("Scala","Kafka","Spark")
      for(item <- names)println(item)
      
      
      import scala.collection.mutable.ArrayBuffer
      val arrayBuffer = ArrayBuffer[Int]()//开始没有内容,需要指定类型
      arrayBuffer += 1
      arrayBuffer += 2
      arrayBuffer += 3
      arrayBuffer += 4
      arrayBuffer += 5
      arrayBuffer += (6,7,8,9,10)
      arrayBuffer ++= Array(11,12,13) //末尾增加
      arrayBuffer.insert(arrayBuffer.length-1, 100,1000) //指定位置增加
      arrayBuffer.remove(arrayBuffer.length-1)//指定位置删除
      arrayBuffer.toArray //当需要多线程并发操作的时候,把ArrayBuffer转换成Array就非常重要
      for(item <- arrayBuffer)println(item)
      
      for(i <- 0 until array.length)print(array(i)+" ")
      println
      
      //每2个元素打印一个元素
      for(i <- 0 until (array.length,2))print(array(i)+" ")
      println
      
      //反转输出,其背后改变下标值
      for(i <- (0 until array.length).reverse)print(array(i)+" ")
      println
      
      //数组内容相加
      println("Sum=" + array.sum)
      //数组内容最大值
      println("Max=" + array.max)
      
      //对数组进行升序排序,内容变成2,3,4,5,10,
      scala.util.Sorting.quickSort(array)
      print("quickSort=")
      for(item <- array)print(item+",")
      println
      
      //以友好方式打印出来
      println("mkString="+array.mkString(","))
      
      println("mkString="+array.mkString("***",",","***"))
      
      //生成新的数据,且内容加1
      val arrayAddedOne = for(item <- array)yield item +1
      println("arrayAddedOne:"+arrayAddedOne.mkString(" "))
      
      //输出下标为偶数内容
      val arrayEven = for(item <- array if item%2==0)yield item+1
      println("arrayEven:"+arrayEven.mkString(" "))
   
    
      println(array.filter { x => x % 2== 0}.mkString("+"))
      //简写 _ % 2 == 0
      println(array.filter { _ % 2== 0}.mkString("+"))
      //输出下标为偶数内容,在乘以10
      println(array.filter { _ % 2== 0}.map { _ *10 }.mkString("="))
    
    }
    
}  
 



















































































第15课:scala类型参数编程实战及spark源码鉴赏 第15课:scala类型参数编程实战及spark源码鉴赏 1 spark源码中的scala类型系统 2 scala类型系统编程操作实战 阅读详情

相关推荐

大数据Spark “蘑菇云”行动前传第5课:零基础实战Scala函数式编程及Spark源码解析

大数据Spark “蘑菇云”行动前传第5课:零基础实战Scala函数式编程及Spark源码解析 1 spark中scala集合操作鉴赏 2 scala集合操作实战

大模型与Agent智能体 1118

Spark初级入门——Spark编程基础(二)

Spark初级入门视频教程,该课程主要包括RDD的依赖关系、RDD的生命周期、RDD transformation操作。详细讲解transformation函数的使用,方法。

大数据Spark “蘑菇云”行动前传第14课Scala集合上的函数式编程实战及Spark源码鉴赏

大数据Spark “蘑菇云”行动前传第14课Scala集合上的函数式编程实战及Spark源码鉴赏 1 Spark源码中Scala集合上的函数式编程 2 Scala集合函数式编程操作实战   4, List是元素的列表集合,是不可变的:  *  第一点:List中head是指第一个元素,tail是指剩下的元素构成的List集合;  *  第二点:使用::这个操作符来把List和其它的元素

大模型与Agent智能体 949

[scala-spark]2. Scala运行原理与源码查看

运行原理 韩顺平 查看源码 package com.lineshen.chapter1 object lookSourceCode { def main(args: Array[String]): Unit = { val arr = new Array[String](10) for (item <- arr){ println("item ...

沈春旭的博客 864

Spark:零基础实战

Spark:零基础实战

ubuntu 20.04系统离线安装nfs

ubuntu环境下,离线安装nfs

m0_62464865的博客 2245

Spark基础+Scala环境搭建+ Spark源码编译部署+ Spark配置History Server +通过算子实现WC例子

一、Spark基础知识 二、Scala环境搭建 1、部署本地SCALA (1)官网下载2.12.15版本 链接:Scala 2.12.15 | The Scala Programming Language (2)配置环境变量 (3)cmd 检查一下 本地 Scala部署完成 2、部署服务器Scala (1)复制下载链接 (2)使用wget命令下载 [peizk@hadoop software]$ wget https://dow...

qq_43476430的博客 3455

W5500 MACRAW模式实战:在ESP32上抓取并解析原始以太网数据包

本文详细介绍了如何在ESP32开发板上使用W5500芯片的MACRAW模式捕获和解析原始以太网数据包。通过硬件连接指南、代码实现示例和协议解析技巧,帮助开发者深入理解网络通信底层机制,实现网络嗅探和自定义协议开发等高级应用。

weixin_42520573的博客 418

Scala实战高手****第6课 :零基础实战Scala集合操作及Spark源码解析

本课内容1.Spark中Scala集合操作鉴赏2.Scala集合操作实战------------------------------------------------------------------------------------------------------------------------ /***大数据技术是数据的集合以及对数据集合的操作技术的统称,具体来说:*...

weixin_30527551的博客 153

电子技术——共栅和共源共栅放大器的高频响应

我们在之前学过无论是是CS放大器还是CE放大器,都可以看做是一个带通(IC低通)滤波器。在高频处的响应收到输入电容 $C_{in}$ 的限制(主要是米勒效应)。因此,若想扩大放大器的带宽,我们必须减小米勒效应,一种方案就是共栅放大器。

jiahonghao2002的博客 4186

Stable-Baselines3性能优化:多环境训练对比指南(DummyVecEnv vs SubprocVecEnv)

本文深入对比了Stable-Baselines3中DummyVecEnv与SubprocVecEnv两种向量化环境的性能差异与应用场景。DummyVecEnv适用于轻量级、步进快的环境,调试友好且开销低;而SubprocVecEnv则通过真正的多进程并行,能显著加速计算密集型环境的训练。文章通过基准测试与决策树,指导开发者根据环境计算成本、CPU核心数等关键因素做出最优选择,以实现训练效率最大化。

weixin_29063979的博客 148

第6课:零基础实战Scala集合操作及Spark源码解析

零基础实战Scala集合操作及Spark源码解析

Spark 2016 624

机器人导航学习历程(四)local planner

local planner   我们先来回顾一下Navigation的框架,可以看出位于红框中的local_planner是move_base节点的一部分,输入包括来自global_planner的全局的规划路径、里程计信息以及local_costmap的信息,输出是速度控制指令,作为控制器的输入。 base_local_planner   局部规划一般是用base_local_planner包...

yuniruchujian的博客 4413

王家林 大数据Spark超经典视频链接全集[转]

压缩过的大数据Spark蘑菇云行动前置课程视频百度云分享链接 链接:http://pan.baidu.com/s/1cFqjQu SCALA专辑 Scala深入浅出经典视频 链接:http://pan.baidu.com/s/1i4Gh3Xb 密码:25jc DT大数据梦工厂大数据spark蘑菇云Scala语言全集(持续更新中) http://www.tudou.com/plc

6883

仓储控制系统(WCS)设计

WCS系统设计方法

cetclyb的博客 2万+

zynq-7000学习笔记(八)——USB摄像头图像采集

PC平台:WINDOWS 10 64位 Xilinx设计开发套件:Xilinx_vivado_sdk_2015.4 开发板:Zed Board USB摄像头:罗技 C270(720P) linux源码:2016_R1 一、配置linux,支持UVC       如果是中星微的ZC3XX系列的芯片,则要进到GSPCA把ZC3XX的驱动选上

luotong86的专栏 1万+

第7课:零基础实战Scala面向对象编程及Spark源码解析

本课内容 1.Spark中面向对象鉴赏 2.Scala中面向对象代码操作实战  ------------------------------------------------------------------------------------------------------------------------ /**  * 如果有这些语法的支持,我们说这门语言是

八嘎兔 293

图神经网络实战(1)——图神经网络(Graph Neural Networks, GNN)基础

本节全面介绍了图神经网络 (Graph Neural Network, GNN) ,包括其在数据分析和机器学习中的重要性。首先探讨了图作为数据表示的相关概念及其在各个领域的广泛应用;然后深入探讨图学习的重要性,包括不同的应用和技术。最后,重点介绍了 GNN 架构,并对比了它与其他方法之间的原理和性能差异。

盼小辉丶的博客 15万+

Scala与Spark:原理、实践与技术全景详解

本文系统梳理了 Scala 语言的基础与进阶特性,深入剖析了 Spark 的原理与架构,并结合实际案例与生态选型,为大数据开发者提供了理论与实践的全景参考。Scala 的表达力和 Spark 的高效分布式能力相结合,极大推动了现代数据处理平台的技术进步。

IT技术学习与工作笔记分享 2181

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Scala中foldLeft的简单使用总结

Scala中foldLeft的简单使用总结 由于工作需要,博主在写spark相关业务代码时用到foldLeft,经过一番搜寻发现很多文章对这个函数的讲解,于初学者来说不好理解,特此我来做个简单易懂的分析总结,供大家参考。 若发现理解上的偏差,还请多指教。 源码分析 def seq: TraversableOnce[A] 上面两段代码是scala.collection.TraversableOnc...

Scala中foldLeft的简单使用总结 2万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

大数据Spark “蘑菇云”行动前传第8课:零基础实战Scala最常用数据结构Map和Tuple及Spark源码鉴赏(学习笔记)

本課課程: Map和Tuple及Spark源码中的鉴赏Map和Tuple代碼操作实战 Map和Tuple及Spark源码中的鉴赏 Map 的例子 HashMap 是 Map 的子類 這里也是 Map 的操作 Tuple 的例子

189

大数据Spark“蘑菇云”行动-第14课Scala集合上的函数式编程实战及Spark源码鉴赏

大数据Spark“蘑菇云”行动-第14课Scala集合上的函数式编程实战及Spark源码鉴赏

zhumr的专栏 1181

scala编程之集合(一)

scala的集合体系结构 scala的集合体系结构主要包括:lterable,Seq,Set,Map 其中lterable是所有集合trait的跟trait,这个结构与Java的集合体系非常相似 scala中的集合非为可变的和不可变的两类集合;其中可变的集合就是说集合的元素可以动态修改,而不可变集合就是在初始化之后就无法修改了.分别对应scala.collection.mutable和scala....

UUSUU的博客 329

大数据学习,hadoop、hive、flume、azkban、hbase、scala编程、spark原理、spark源码解析、机器学习以及项目实战 。

离线部分课程主要包括:hadoop、hive、flume、azkban、hbase等以及项目实战 实时部分课程主要包括:storm、kafka、redis以及项目实战 内存计算部分课程主要包括:scala编程、spark原理、spark源码解析、机器学习以及项目实战 。 1,大数据开发之Hadoop工程师基础 链接:https://pan.baidu.com/s/1Af9ZJSkFLmAmaa85...

a137818050的博客 373

大数据系列第二课:scala基础

第一阶段:Spark streaming、spark sql、kafka、spark内核原   理(必须有一个大型项目经验); 第二阶段:spark运行的各种环境,各种故障的解决,性能   优化(精通spark内核、运行原理); 第三阶段:流处理、机器学习为鳌头,需要首先掌握前两个   阶段的内容; 跟随王家林老师的零基础讲解,注重动手实战,成为spark高数,笑傲大数据之林! 第一部

kxr0502的博客 2965

第2讲:Scala面向对象彻底精通及Spark源码阅读

本期内容: 1. Scala中的类、object实战详解 2. Scala中的抽象类、接口实战详解 3. 综合案例及Spark源码解析

一叶扁舟的博客 1077
上一篇: 第5课:零基础实战Scala函数式编程及Spark源码解析
下一篇: 第7课:零基础实战Scala面向对象编程及Spark源码解析
怪兽兔
博客等级 码龄19年 7粉丝 68原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值