首页 > 其他分享 >学习笔记5

学习笔记5

时间:2024-01-16 18:57:35浏览次数:25  
标签:函数 scala 分区 编程 个数 笔记 学习 RDD

RDD分区
RDD是弹性分布式数据集,通常RDD很大,会被分成很多个分区分别保存在不同的节点上,分区的作用:(1)增加并行度(2)减少通信开销。RDD分区原则是使得分区的个数尽量等于集群中的CPU核心(core)数目,对于不同的Spark部署模式而言(本地模式、Standalone模式、YARN模式、Mesos模式),都可以通过设置spark.default.parallelism这个参数的值,来配置默认的分区数目,一般而言:

本地模式:默认为本地机器的CPU数目,若设置了local[N],则默认为N;

Standalone或YARN:在“集群中所有CPU核心数目总和”和2二者中取较大值作为默认值;

设置分区的个数有两种方法:创建RDD时手动指定分区个数,使用reparititon方法重新设置分区个数;

创建RDD时手动指定分区个数:在调用textFile()和parallelize()方法的时候手动指定分区个数即可,语法格式如 sc.textFile(path, partitionNum),其中path参数用于指定要加载的文件的地址,partitionNum参数用于指定分区个数。

scala> val array = Array(1,2,3,4,5)

scala> val rdd = sc.parallelize(array,2) //设置两个分区

reparititon方法重新设置分区个数:通过转换操作得到新 RDD 时,直接调用 repartition 方法即可,如:

复制
scala> val data = sc.textFile("file:///usr/local/spark/mycode/rdd/word.txt",2)

scala> data.partitions.size //显示data这个RDD的分区数量

scala> val rdd = data.repartition(1) //对data这个RDD进行重新分区

scala> rdd.partitions.size

res4: Int = 1

函数式编程特性
函数式编程属于声明式编程的一种,将计算描述为数学函数的求值,但函数式编程没有准确的定义,只是一系列理念,并不需要严格准守,可以理解为函数式编程把程序看做是数学函数,输入的是自变量,输出因变量,通过表达式完成计算,当前越来越多的命令式语言支持部分的函数式编程特性。

在函数式编程中,函数作为一等公民,就是说函数的行为和普通变量没有区别,可以作为函参进行传递,也可以在函数内部声明一个函数,那么外层的函数就被称作高阶函数。

函数式编程的curry化:把接受多个参数的函数变换成接受一个单一参数的函数,返回接受余下的参数并且返回结果的新函数。

函数式编程要求所有的变量都是常量(这里所用的变量这个词并不准确,只是为了便于理解),erlang是其中的典型语言,虽然许多语言支持部分函数式编程的特性,但是并不要求变量必须是常量。这样的特性提高了编程的复杂度,但是使代码没有副作用,并且带来了很大的一个好处,那就是大大简化了并发编程。

Java中最常用的并发模式是共享内存模型,依赖于线程与锁,若代码编写不当,会发生死锁和竞争条件,并且随着线程数的增加,会占用大量的系统资源。在函数式编程中,因为都是常量,所以根本就不用考虑死锁等情况。为什么说一次赋值提高了编程的复杂度,既然所有变量都是常量,那么我们没办法更改一个变量的值,循环的意义也就不大,所以haskell与erlang中使用递归代替了循环。

标签:函数,scala,分区,编程,个数,笔记,学习,RDD
From: https://www.cnblogs.com/liucaizhi/p/17968327

相关文章

  • 面试学习——线程篇
    Thread的生命周期指线程从创建到销毁的整个过程。在线程的生命周期中,可能会经历不同的状态变化。线程的运行状态:NEW:线程对象被创建,未启动线程READY:start()启动RUNNABLE(可以运行的线程状态):线程已被加载到线程调度器的就绪队列中,等待CPU的调度执行。RUNNING:线程正在执......
  • Docker 学习笔记 - 3
    Docker镜像1.联合文件系统(UnionFS)UnionFS是一种分层、轻量级并且高性能的文件系统,它支持对文件系统的修改作为一次提交来一层层的叠加,同时可以将不同目录挂载到同一个虚拟文件系统下,UnionFS是docker镜像的基础,镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体......
  • AdaMCL: Adaptive Fusion Multi-View Contrastive Learning for Collaborative Filter
    AdaMCL:AdaptiveFusionMulti-ViewContrastiveLearningforCollaborativeFilteringAbstract​ 大多数基于CL的方法只利用原始的用户-项目交互图来构造CL任务,缺乏对高阶信息的显示利用。而且即使是使用高阶信息的基于CL的方法,高阶信息的接收字段也是固定的,没有考虑到节点之......
  • 机器学习中准确度(accuracy)和精确度(precision)的区别
    准确率(accuracy)是指模型正确预测的样本数与总样本数之比。它衡量了模型对所有样本的分类准确程度。准确率计算公式如下:准确率=(真阳性+真阴性)/(真阳性+假阳性+真阴性+假阴性)精确度(precision)是指模型在预测为正例的样本中,真正例的比例。它衡量了模型在预测为正例的......
  • 多线程(Java.Thread)学习(完结)
    多线程(Java.Thread)学习线程简介:1、线程是独立执行的路径2、程序运行时有很多后台进程比如主线程、young.gc、full.gc()3、main是主线程,系统入口,用于执行整个程序4、一个进程中、如果开辟多个线程,线程的运行由调度器安排调度、调度器的先后顺序不能人为干预5、对同一份资......
  • 【论文笔记#2】Farseg++:用于高空间分辨率遥感图像地理空间对象分割的前景感知关系网络
    论文来源IEEETransactionsonPatternAnalysisandMachineIntelligence作者ZhuoZheng;YanfeiZhong;JunjueWang等发表年代2023使用方法多分支金字塔编码、前景-场景关系、前景感知解码、前景感知优化期刊层次CCFA;计算机科学1区;IF23.6原文链接......
  • C语言学习随笔-11 作用域
     作用域:作用域是程序中定义的变量所存放的区域,超过该区域就不能被访问 C语言中有三个地方可以声明变量: - 在函数或块内部的局部变量。 - 在所有函数外部的全局变量。 - 在形式参数的函数参数定义中。1、局部变量intmain局部变量(){/*1、局部变量......
  • 2024.1.16-每日进度笔记
    今天,尝试在jsp中上传图片并进行预览,同时将上传的图片等比例缩小到预览区域内。 参考:百度文心一言的回复。 <%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtml><html><head><metacharset=&qu......
  • [spring] spring学习笔记(2): 通过xml实现依赖注入 - 特殊注入类型
    实际应用中,我们的对象可能会引用很多不同类型的东西,不单单只是几个数值对象类型在前一篇文章中,已经使用引用对象作为例子,关键在于使用ref<!--注意引用的对象要先创建Bean,id为weapon1--><beanid="player1"class="com.demo.player"> <!--通过setter注入,注意ref的......
  • Linux 学习资料
    目录Linux工具快速教程鸟哥的Linux私房菜Linux就该这么学Linux工具快速教程链接鸟哥的Linux私房菜链接1链接2Linux就该这么学链接......