Spark之RDD转换算子
目录
一.value类型
1.map()
2.mapPartitions()
3.mapPartitionsWithIndex()
4.flatMap()扁平化
5.glom()
6.groupBy()
7.filter()
8.sample()
9. distinct()
10.coalesce()
11.repartition()
12.sortBy()
13. pipe()
二、双value
1.intersection()
2.union()
3.subtract()
4.zip()
三、KEY-VALUE类型
1.partitionBy()
2.自定义分区
3.reduceByKey()
4.groupByKey()
5.aggregateByKey()
6.foldByKey()
7.combineByKey()
8.sortByKey()
9.mapValues()
10.join()
11.cogroup()
12.求top3
一.value类型
1.map()
映射:新RDD每一个元素都是由原来RDD中每一个元素依次应用函数f得到的
val value: RDD[Int] = sc.makeRDD(1 to 4, 2)
val rdd1: RDD[Int] = value.map(_*2)
2.mapPartitions()
以分区为单位执行Map
val rdd2: RDD[Int] = value.mapPartitions(list=> {println("计算一个数字") //运行两遍 因为两个分区list.map(i => {println("数字") //运行四遍i*2})})
rdd2.collect().foreach(println)
注:在空间资源较大时使用,一个分区数据处理完之后,原RDD分区中的数据才释放,可能导致OOM
3.mapPartitionsWithIndex()
带分区号映射,创建一个RDD,使每个元素跟所在分区号形成一个元组,组成一个新的RDD
val rdd4: RDD[(Int, Int)] = value.mapPartitionsWithIndex((num,list)=> list.map(i=>(num,i)))
val rdd3: RDD[(Int, Int)] = value.mapPartitionsWithIndex((num,list)=>list.map((num,_)))
rdd3.collect().foreach(println)
4.flatMap()扁平化
将RDD中的每一个元素通过应用f函数依次转换为新的元素,并封装到RDD中。但在flatMap操作中,f函数的返回值是一个集合,并且会将每一个该集合中的元素拆分出来放到新的RDD中。
// 判断分区// flatMap不改变分区的情况 保持原分区val rdd3: RDD[(Int, Int)] = value1.mapPartitionsWithIndex((num,list)=>list.map((num,_)))rdd3.collect().foreach(println)// 对应 (长字符串 ,次数) => (单词,次数),(单词,次数)val tupleRDD: RDD[(String, Int)] = sc.makeRDD(List(("hello world", 100), ("hello scala", 200)))val value3: RDD[(String, Int)] = tupleRDD.flatMap(tuple => {val strings: Array[String] = tuple._1.split(" ")strings.map(word => (word, tuple._2))})value3.collect().foreach(println)tupleRDD.flatMap(tuple => {tuple._1.split(" ").map(word => (word,tuple._2))})// 偏函数写法val value4: RDD[(String, Int)] = tupleRDD.flatMap(tuple => tuple match {case (line, count) => line.split(" ").map(word => (word, count))})value4.collect().foreach(println)val value5: RDD[(String, Int)] = tupleRDD.flatMap{case (line, count) => line.split(" ").map(word => (word, count))}
5.glom()
将RDD中每一个分区变成一个数组,并放置在新的RDD中,数组中元素的类型与原分区中元素类型一致
val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4),2)
val value: RDD[Array[Int]] = listRDD.glom()
val arraydemo: RDD[Int] = value.map(Array => (Array.max))
arraydemo.collect().foreach(println)// 从一个sql脚本文件中 提取对应的sql
val lineRDD: RDD[String] = sc.textFile("input/1.sql",1)// 直接使用spark的算子读取sql脚本文件 里面的内容是打散为一行一行
val value2: RDD[Array[String]] = lineRDD.glom()//mkString 数组转化为字符串
value2.map(array => array.mkString).collect().foreach(println)
6.groupBy()
将相同K对应的值放入一个迭代器
val sc: SparkContext = new SparkContext(conf)val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4),2)val value: RDD[(Int, Iterable[Int])] = listRDD.groupBy(i => i%2)value.collect().foreach(println)//(0,CompactBuffer(2, 4))//(1,CompactBuffer(1, 3))//groupby实现wordcountval text: RDD[String] = sc.textFile("input/1.txt")val fmRDD: RDD[String] = text.flatMap(_.split(" "))val value: RDD[(String, Iterable[String])] = fmRDD.groupBy(s => s)value.collect().foreach(println)val value1: RDD[(String, Int)] = value.mapValues(list => list.size)value1.collect().foreach(println)val value2: RDD[(String, Int)] = value.map({case (word, list) => (word, list.size)})value2.collect().foreach(println)
7.filter()
接收一个返回值为布尔类型的函数作为参数。当某个RDD调用filter方法时,会对该RDD中每一个元素应用f函数,如果返回值类型为true,则该元素会被添加到新的RDD中。
val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4),2)val value: RDD[Int] = listRDD.filter(i => i%2 ==0)value.collect().foreach(println)// 过滤// 保持分区不变
8.sample()
采样,从大量的数据中采样
val listRDD: RDD[Int] = sc.makeRDD(1 to 10)// 抽取数据不放回(伯努利算法)// 伯努利算法:又叫0、1分布。例如扔硬币,要么正面,要么反面。// 具体实现:根据种子和随机算法算出一个数和第二个参数设置几率比较,小于第二个参数要,大于不要// 第一个参数:抽取的数据是否放回,false:不放回// 第二个参数:抽取的几率,范围在[0,1]之间,0:全不取;1:全取;// 第三个参数:随机数种子// 随机算法相同,种子相同,那么随机数就相同// 不输入参数,种子取的当前时间的纳秒值,所以随机结果就不相同了val value1: RDD[Int] = listRDD.sample(false,0.5,10)value1.collect().foreach(println)// 抽取数据放回(泊松算法)// 第一个参数:抽取的数据是否放回,true:放回;false:不放回// 第二个参数:重复数据的几率,范围大于等于0.表示每一个元素被期望抽取到的次数// 第三个参数:随机数种子val value2: RDD[Int] = listRDD.sample(true,2.3,100)value2.collect().foreach(println)
9. distinct()
去重,将去重后的数据放入新的RDD中
val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4,5,4,2,3,1,6),2)
val value: RDD[Int] = listRDD.distinct()
//distinct会存在shuffle过程
10.coalesce()
合并分区,缩减分区数,用于大数据集过滤后,提高小数据集的执行效率。
// 缩减分区// 多对一的关系 不走shuffleval coalrdd: RDD[Int] = listRDD.coalesce(2)val rdd3: RDD[(Int, Int)] = coalrdd.mapPartitionsWithIndex((num,list)=>list.map((num,_)))rdd3.collect().foreach(println)println("===============")// 扩大分区// 必须走shuffle 不然没有意义val listRDD1: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4),2)val coalrdd2: RDD[Int] = listRDD1.coalesce(5,true)val rdd4: RDD[(Int, Int)] = coalrdd2.mapPartitionsWithIndex((num,list)=>list.map((num,_)))rdd4.collect().foreach(println)
11.repartition()
重新分区,该操作内部其实执行的是coalesce操作,参数shuffle的默认值为true。无论是将分区数多的RDD转换为分区数少的RDD,还是将分区数少的RDD转换为分区数多的RDD,repartition操作都可以完成,因为无论如何都会经shuffle过程。
val sc: SparkContext = new SparkContext(conf)val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4),2)val value: RDD[Int] = listRDD.repartition(4)val rdd3: RDD[(Int, Int)] = value.mapPartitionsWithIndex((num,list)=>list.map((num,_)))
12.sortBy()
排序,该操作用于排序数据。在排序之前,可以将数据通过f函数进行处理,之后按照f函数处理的结果进行排序,默认为正序排列。排序后新产生的RDD的分区数与原RDD的分区数一致。
val listRDD: RDD[Int] = sc.makeRDD(List(1,6,5,4,2,3,4,9),2)val value: RDD[Int] = listRDD.sortBy(i => i)value.collect().foreach(println)println("==================")// spark的排序能够实现全局有序// 保证0号分区的数据都大于等于1号分区的数据// sortBy需要走shuffleval value2: RDD[Int] = listRDD.sortBy(i => i,false)val rdd3: RDD[(Int, Int)] = value2.mapPartitionsWithIndex((num,list)=>list.map((num,_)))rdd3.collect().foreach(println)
// (0,9)
// (0,6)
// (0,5)
// (1,4)
// (1,4)
// (1,3)
// (1,2)
// (1,1)
13. pipe()
调用脚本,管道,针对每个分区,都调用一次shell脚本,返回输出的RDD
二、双value
1.intersection()
求交集
2.union()
求并集
3.subtract()
求差集
4.zip()
拉链,该操作可以将两个RDD中的元素,以键值对的形式进行合并。其中,键值对中的Key为第1个RDD中的元素,Value为第2个RDD中的元素。
将两个RDD组合成Key/Value形式的RDD,这里默认两个RDD的partition数量以及元素数量都相同,否则会抛出异常。
val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4),2)val listRDD1: RDD[Int] = sc.makeRDD(List(1,2,3,4),2)// 求交集会打散重新分区 即需要走shuffle// 默认采用交集中较多的分区val demo01: RDD[Int] = listRDD.intersection(listRDD1)demo01.collect().foreach(println)// 求并集// 并集不走shuffle// 只是把两个RDD的分区数据拿到一起 分区的个数等于两个RDD分区个数之和val demo02: RDD[Int] = listRDD.union(listRDD1)val rdd3: RDD[(Int, Int)] = demo02.mapPartitionsWithIndex((num,list)=>list.map((num,_)))rdd3.collect().foreach(println)// 求差集// 需要重写分区 走shuffle 可以自己写分区数println("=======================")val demo03: RDD[Int] = listRDD.subtract(listRDD1)val rdd4: RDD[(Int, Int)] = demo03.mapPartitionsWithIndex((num,list)=>list.map((num,_)))rdd4.collect().foreach(println)// 将相同分区对应位置的元素拉链到一起 成为一个2元组// zip只能操作两个rdd具有相同的分区个数和元素个数val demo04: RDD[(Int, Int)] = listRDD.zip(listRDD1)demo04.mapPartitionsWithIndex((num,list) => list.map((num,_))).collect().foreach(println)
三、KEY-VALUE类型
1.partitionBy()
根据key值重新分区,如果原有的RDD和新的RDD是一致的话就不进行分区,否则会产生Shuffle过程。
val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4),2)val value: RDD[(Int, Int)] = listRDD.map((_,1))//按照key对分区数取模分区val hp: RDD[(Int, Int)] = value.partitionBy(new HashPartitioner(2))hp.mapPartitionsWithIndex((num,list)=>list.map((num,_))).collect().foreach(println)
2.自定义分区
要实现自定义分区器,需要继承org.apache.spark.Partitioner类,并实现下面三个方法。
(1)numPartitions: Int:返回创建出来的分区数。
(2)getPartition(key: Any): Int:返回给定键的分区编号(0到numPartitions-1)。
(3)equals():Java 判断相等性的标准方法。这个方法的实现非常重要,Spark需要用这个方法来检查你的分区器对象是否和其他分区器实例相同,这样Spark才可以判断两个RDD的分区方式是否相同
val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4),2)val value: RDD[(Int, Int)] = listRDD.map((_,1))val hp: RDD[(Int, Int)] = value.partitionBy(new MyPartition)hp.mapPartitionsWithIndex((num,list)=>list.map((num,_))).collect().foreach(println)sc.stop()}//自定义分区class MyPartition extends Partitioner{override def numPartitions: Int = 2// 获取分区号 => 根据元素的key值 判断分给哪个分区// spark 的分区器只能对key进行分区override def getPartition(key: Any): Int = {key match {case i:Int => i%2case _ => 0}
3.reduceByKey()
元素按照相同的Key对Value进行聚合。其存在多种重载形式,还可以设置新RDD的分区数。
val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4), 2)val tuplerdd: RDD[(Int, Int)] = listRDD.map( (_ ,1))val result1: RDD[(Int, Int)] = tuplerdd.reduceByKey((res,elem) => res - elem)result1.collect().foreach(println)// 验证结果// 需要进行两次归约 一次分区内 一次分区间// 分区间的第一个元素取决于分区的编号 编号越小越靠前val value1: RDD[(String, Int)] = sc.makeRDD(List(("a", 1), ("a", 1), ("a", 1), ("b", 1), ("b", 1), ("b", 1), ("b", 1), ("a", 1),("c",1)), 2)val result2: RDD[(String, Int)] = value1.reduceByKey((res,elem) => res - elem)result2.collect().foreach(println)
4.groupByKey()
按照key重新分组,对每个key进行操作,但只生成一个seq,并不进行聚合
val listRDD: RDD[Int] = sc.makeRDD(List(1, 2, 3, 4,1,2,3,4),2)val tupleRDD: RDD[(Int, Int)] = listRDD.map((_, 1))val result: RDD[(Int, Iterable[(Int, Int)])] = tupleRDD.groupBy(tuple => tuple._1)result.collect().foreach(println)//(4,CompactBuffer((4,1), (4,1)))//(2,CompactBuffer((2,1), (2,1)))//(1,CompactBuffer((1,1), (1,1)))//(3,CompactBuffer((3,1), (3,1)))val result2: RDD[(Int, Iterable[Int])] = tupleRDD.groupByKey()result2.collect().foreach(println)//(4,CompactBuffer(1, 1))//(2,CompactBuffer(1, 1))//(1,CompactBuffer(1, 1))//(3,CompactBuffer(1, 1))
5.aggregateByKey()
按照Key处理分区内和分区间逻辑
val value1: RDD[(String, Int)] = sc.makeRDD(List(("a", 10), ("b", 7), ("a", 11), ("b", 21)), 4)val result1: RDD[(String, Int)] = value1.aggregateByKey(10)(_ + _,_ + _)result1.collect().foreach(println)
6.foldByKey()
即分区内和分区间相同的aggregateByKey()
val value1: RDD[(String, Int)] = sc.makeRDD(List(("a", 10), ("b", 7), ("a", 11), ("b", 21)), 4)value1.foldByKey(10)(_ + _).collect().foreach(println)value1.foldByKey(10)((res,elem) => math.max(res,elem)).collect().foreach(println)
7.combineByKey()
转换结构后分区内和分区间操作,针对相同Key,将Value合并成一个集合。
val value1: RDD[(String, Int)] = sc.makeRDD(List(("a", 10), ("b", 7), ("a", 11), ("b", 21)), 4)// 对上面的元素进行归约 (单词,("product",21))val value: RDD[(String, (String, Int))] = value1.combineByKey(i => ("product", i),// 分区内计算 是转换结构后的初始值和分区相同key的元素值进行归约(res: (String, Int), elem: Int) => (res._1, res._2 * elem),// 分区间计算 将每个分区相同key的res值进行合并(res: (String, Int), elem: (String, Int)) => (res._1, res._2 * elem._2))value.collect().foreach(println)println("==========================")val list: List[(String, Int)] = List(("a", 88), ("b", 95), ("a", 91), ("b", 93), ("a", 95), ("b", 98))val listRDD1: RDD[(String, Int)] = sc.makeRDD(list)val result2: RDD[(String, (Int, Int))] = listRDD1.combineByKey(// 将(a,88) => (a,(88,1)) 因为算子已经内部按照key聚合了 所以写的时候只写valuei => (i, 1),(res: (Int, Int), elem: Int) => (res._1 + elem, res._2 + 1),// 分区内累加 将相同分区相同key的值合并 (88,1)和91 => (179,2)// 分区间累加 将不同分区相同key的二元组合并在一起 (179,2) 和 (95,1) => (274,3)(res: (Int, Int), elem: (Int, Int)) => (res._1 + elem._1, res._2 + elem._2))result2.mapValues({case (res,elem) => res.toDouble/elem}).collect().foreach(println)
区别:
8.sortByKey()
按照K进行排序,在一个(K,V)的RDD上调用,K必须实现Ordered接口,返回一个按照key进行排序的(K,V)的RDD
val value: RDD[(String, Int)] = sc.makeRDD(List(("a", 110), ("b", 27), ("a", 11), ("b", 21)), 2)// 默认使用range分区器(尽量保证每个分区中数据量的均匀,而且分区与分区之间是有序的,一个分区中的元素肯定都是比另一个分区内的元素小或者大;但是分区内的元素是不能保证顺序的。)// 固定使用二元组中的key进行排序 不会使用valuevalue.sortByKey(false).collect().foreach(println)// 使用value排序// 可以使用sortBy 底层仍为sortbykeyvalue.sortBy(_._2).collect().foreach(println)
9.mapValues()
只对value进行修改
val value: RDD[(String, Int)] = sc.makeRDD(List(("a", 110), ("b", 27), ("a", 11), ("b", 21)), 2)value.mapValues(i => i*2).collect().foreach(println)
10.join()
在类型为(K,V)和(K,W)的RDD上调用,返回一个相同key对应的所有元素对在一起的(K,(V,W))的RDD
val value: RDD[(String, Int)] = sc.makeRDD(List(("a", 110), ("b", 27), ("a", 11), ("b", 21)), 2)val value1: RDD[(String, Int)] = sc.makeRDD(List(("a", 110), ("b", 27), ("a", 11), ("b", 21)), 2)// 将相同key合并// join走shuffle 使用hash分区器// 尽量保证join之前key是不重复的 如果有重复 会造成最终结果也是重复的value.join(value1).collect().foreach(println)//解决重复value.groupByKey().join(value1).collect().foreach(println)
11.cogroup()
在类型为(K,V)和(K,W)的RDD上调用,返回一个(K,(Iterable<V>,Iterable<W>))类型的RDD
val rdd: RDD[(Int, String)] = sc.makeRDD(Array((1,"a"),(2,"b"),(3,"c")))val rdd1: RDD[(Int, Int)] = sc.makeRDD(Array((1,4),(2,5),(4,6)))rdd.cogroup(rdd1).collect().foreach(println)
12.求top3
val listRDD: RDD[String] = sc.textFile("input/agent.log")val result1: RDD[(String, Int)] = listRDD.map({line => {val strings: Array[String] = line.split(" ")(strings(1) + "-" + strings(2), 1)}}).reduceByKey(_ + _)result1.collect().foreach(println)val result2: RDD[(String, Iterable[(String, Int)])] = result1.map({ case (res, sum) => {val strings01: Array[String] = res.split("-")(strings01(0), (strings01(1), sum))}}).groupByKey()val result3: RDD[(String, List[(String, Int)])] = result2.mapValues({datas => {datas.toList.sortWith((left, right) => {left._2 > right._2}).take(3)}})
// 简写result3.mapValues(_.toList.sortWith(_._2 > _._2).take(3))result3.collect().foreach(println)
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- 【学习总结匈牙利算法到KM算法】
目录匈牙利算法概述匈牙利算法流程从匈牙利算法到KM算法小结参考匈牙利算法概述 网上已经存在很多介绍匈牙利算法与KM算法,但是很多都混为一谈。基本上没有进行区分开来,我也是混淆了许久。一是确实二者确实很类似,二是没有仔细分析拿来就用主…...
2024/4/13 6:37:48 - C语言, C++ IO 总结. 一篇文章帮你透析缓冲区存在的意义, C, C++ IO的常见用法
目录 一. IO缓冲区存在的意义 (屏蔽低级IO) 二. C标准IO C标准IO 刨析及其解决字符串输入空格结束问题刨析 (以及常用IO函数刨析) 三. C 文件IO (从常用函数刨析到具体案例实现) 四. C 文件IO (从常见方法刨析到 案例实现) 五. 从C语言的 fprintf 进化到 sstre…...
2024/5/4 15:21:23 - Rhino基础教程---三管混接
三管混接看起来简单,做起来难,因为有很多细节要处理,如果处理不好,面与面之间连接就会不顺。接下来让我们一起来学习一下。 第一步:以原点为中心画一个圆管,距离原点留一点距离。 第二步:鼠标…...
2024/4/16 19:48:10 - C++出现错误类型error C2664的解决方案(VS环境)
定义如下形式的字符串 char *testString “This is test string…”编译器显示这段代码错误,运行后显示为C2664错误 这时候我们只需要修改一下项目设置 具体步骤: 一、标签页点击项目,下拉找到自己的项目名称 二、找到 C/C -> 语言 …...
2024/4/5 2:09:47 - Java语法中“==”与“.equals”的区别
以字符串类型为例: 1.定义字符串 String str1 “abcd”,str2 "abcd"; 此时用“”比较str1与str2,输出结果为true 这样定义的两个字符串内容相同,在常量池中的内存地址相同,所以比较的结果相等 像下面这样定义&#…...
2024/4/13 6:38:54 - java在字符串中“==”和“equals”的区别
一、二者简介 如果是两个基本类型的数据,""是判断两个数值是否相等。在两个字符串中“”是判断它们的内存地址是否相同,“equals()”方法是比较两个字符串是否一样,它们的结果都是布尔值。 例1: boolean is (123 1…...
2024/4/20 16:51:16 - 可变阻抗控制思想
机器人为了与周围环境进行身体互动,以完成一些任务或协助人类进行活动,需要以一种安全和熟练的方式利用接触力。阻抗控制被认为是机器人技术中的一种突出的方法,以避免在非结构化环境中工作时的巨大冲击力。在这样的环境中,交互发…...
2024/4/13 6:38:54 - uboot移植star(linux驱动开发篇)
拿走不谢! 从EMMC启动 ls mmc 1:1 setenv bootargs ‘consolettymxc0,115200 root/dev/mmcblk1p2 rootwait rw’ setenv bootcmd ‘mmc dev 1; fatload mmc 1:1 80800000 zImage; fatload mmc 1:1 83000000 imx6ull-14x14-emmc-4.3-800x480-c.dtb; bootz 808000…...
2024/4/13 6:38:24 - LeetCode 70. 爬楼梯
https://leetcode-cn.com/problems/climbing-stairs/ 动态规划 当前楼梯的方法数 前一阶楼梯的方法数 前前一阶楼梯的方法数 f (n) f(n - 1) f(n - 2) 状态转移: 遍历, 逐个计算当前楼梯的方法数 public int climbStairs(int n) {int p 0, q 0, r 1;for (int i 0; i &…...
2024/4/8 18:53:23 - day 03
三. 压缩与解压缩的命令 1. bzip2 用于压缩文件 格式: bzip2 文件名称 文件会压缩, 并被命名为新的压缩包文件.(原文件被替代) 例: bzip2 chunxiao.txt > chunxiao.txt.bz2 解压缩 bz2文件 bunzip2 压缩包.bz2 > 文件, 压缩包被替代 例: bunzip…...
2024/4/13 6:38:34 - Javascript 常见语句
一、在逻辑运算符中的需要强调的部分: “” 绝对等 “!”绝对不等于 和“”的不同在于—— 与进行值是否相等的判断不同 ,绝对等 还会进行 类型的判断 比如 数字1和 字符串1比较,值是相等的,但是类型不同 所以会返回true,但是会…...
2024/4/13 6:38:34 - 【java问题排查】java程序比较占用内存
Linux 输入命令top 按1,然后在按m top# 按M 参数详解 M:根据驻留内存大小进行排序; 查看进程的线程详情 ps p 24135 -L -o pcpu,pmem,pid,tid,time,tname,cmd...
2024/4/13 6:38:44 - 22.02.11复习
c进制转换 看着简单的几何题 c/c四舍五入丢精度的问题...
2024/4/20 1:16:04 - spring整合mybatis核心原理
在我常使用mybatis中,会经常使用MapperScan注解下面我们来看看它是如何整合进到spring的,首先我们进入MapperScan会看到Import(MapperScannerRegistrar.class) 我们打开MapperScannerRegistrar会看到实现了ImportBeanDefinitionRegistrar接口,…...
2024/4/13 6:38:29 - 设计模式系统回顾(13)组合模式
目的:实现一些类似整体与部分,树形结构的东西 1.透明模式 public abstract class GkAbstractCourse {public void addChild(GkAbstractCourse course){//添加子节点System.out.println("不支持添加操作");}public String getName() throws E…...
2024/4/17 21:37:37 - 剑指offer89:房屋偷盗
题目: 一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响小偷偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。 给定一个代表每个…...
2024/4/15 16:14:43 - 第七次网页前端培训笔记——JavaScript(3)
1.内置对象 1.String <script type"text/javascript">var str "Hello Word";console.log();console.log(str);console.log(str.substring(3)); //从下标3开始,截取到最后console.log(str.substring(3,5)); //从下标3开始,到下…...
2024/4/13 6:38:24 - buuoj reverse 不一样的flag
不一样的flag 将下载好的文件例行查壳,无壳 拖入IDA,既然是字符串,就先查一下字符串。 这一串蛮可疑的 ,main函数中看到方向,合理怀疑走迷宫,main函数最后有说,走到‘49’即1就退出࿰…...
2024/4/8 18:53:15 - hello github-->一颗闷骚的心掩饰不了我那爱学习的动力
一颗闷骚的心掩饰不了我那爱学习的动力 老夫有一颗少女心,哎呀不小心暴露了我的小九九: 成长之路,未完待续… 仓库目录结构说明:已经存放markdown格式和PDF格式的文章全部做了超链接。 PDF整合完善中:整理的PDF文件文…...
2024/4/16 0:11:02 - 大专应届生内心独白:室友都有依靠,小丑竟是我自己。从3000的调酒师,到1.2w的Python开发,我走了大半年
室友都有大腿抱,孤单的只有自己 作为大专生,我们大三下学期没有课程,主要是写论文,找工作,可我一点也不着急,因为我还没做好毕业的准备,也很迷茫。 室友A准备回老家考公务员、室友B的父母已经…...
2024/4/13 6:38:34
最新文章
- Java Map集合(二)
1. HashMap原理 1.1 HashMap的容量 HashMap中使用数组作为存储元素的桶,对应的内部属性为table,如下图所示。HashMap的内部数组不是在创建HashMap对象时初始化,而是在首次存入元素时进行初始化,以减少对内存的占用。 从源码注释中…...
2024/5/4 16:35:08 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/3/20 10:50:27 - audio_video_img图片音视频异步可视化加载
最近在做即时消息,消息类型除了文字还有音频、视频、图片展示,如果消息很多,在切换聊天框时,会有明显卡顿,后续做了懒加载,方案是只加载用户能看到的资源,看不到的先不加载; LazyAud…...
2024/5/2 22:59:28 - YOLOv9架构图分享
YOLOv9是YOLO (You Only Look Once)系列实时目标检测系统的最新迭代。它建立在以前的版本之上,结合了深度学习技术和架构设计的进步,以在目标检测任务中实现卓越的性能。通过将可编程梯度信息(PGI)概念与广义ELAN (GELAN)架构相结合,YOLOv9在…...
2024/5/4 11:01:35 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/1 17:30:59 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/2 16:16:39 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/4/29 2:29:43 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/3 23:10:03 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/4/27 17:58:04 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/4/27 14:22:49 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/4/28 1:28:33 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/4/30 9:43:09 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/4/27 17:59:30 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/2 15:04:34 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/4/28 1:34:08 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/4/26 19:03:37 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/4/29 20:46:55 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/4/30 22:21:04 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/1 4:32:01 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/4 2:59:34 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/4/28 5:48:52 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/4/30 9:42:22 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/2 9:07:46 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/4/30 9:42:49 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57