
scala
文章平均质量分 77
肥大毛
落魄谷中寒风吹,春秋蝉鸣少年归。
展开
-
SparkStreaming---DStream
用户自定义数据源需要继承 Receiver,并实现 onStart、onStop 方法来自定义数据源采集。//最初启动的时候,调用该方法,读数据并将数据发送给 Sparkreceive()}.start()///读数据并将数据发送给 Spark//创建Socket//创建变量用于接收端口穿过来的数据//创建BufferedReader用于读取端口传来的数据//读取数据//当 receiver 没有关闭并且输入数据不为空while(!= null){//循环发送数据给 Spark。原创 2024-02-01 09:50:33 · 1335 阅读 · 0 评论 -
SparkStreaming---入门
流处理和批处理是两种不同的数据处理方式,它们在处理数据的方式和特点上有所不同。流处理(Stream Processing)是一种数据处理方式,它实时地处理数据流,即将源源不断的数据按照特定的规则进行实时处理。批处理(Batch Processing)是一种数据处理方式,它将一段时间内的数据收集起来,然后一次性地进行处理。原创 2024-01-31 15:59:02 · 1347 阅读 · 0 评论 -
SparkSql---用户自定义函数UDF&&UDAF
如:实现需求在用户name前加上"Name:"字符串,并打印在控制台。原创 2024-01-28 11:34:08 · 1011 阅读 · 0 评论 -
Spark---累加器和广播变量
用户可以通过继承AccumulatorV2来自定义累加器。需求:自定义累加器实现WordCount案例。AccumulatorV2[IN,OUT]中:IN:输入数据的类型OUT:输出数据类型/*** 使用累加器完成WordCount案例*///建立与Spark框架的连接val wordCount = new SparkConf().setMaster("local").setAppName("WordCount") //配置文件。原创 2024-01-13 17:37:27 · 942 阅读 · 0 评论 -
Spark---RDD持久化
但是,在实际使用的时候,如果想重用数据,仍然建议调用persist 或 cache。但是并不是这两个方法被调用时立即缓存,而是触发后面的 action 算子时,该 RDD 将会被缓存在计算节点的内存中,并供后面重用。在Spark中,持久化是将RDD存储在内存中,以便在多次计算之间重复使用。可以看出将中间结果放入缓存中后,第二次使用中间结果的时候,将不会从头再执行一遍,而是直接从缓存中读取数据,,在reduceByKey使用完成之后,groupByKey想要再次使用的时候,原创 2024-01-12 16:29:35 · 1037 阅读 · 0 评论 -
Spark---RDD依赖关系
如上述代码所示,words的形成依赖于lines,wordGroup依赖于words,wordToCount依赖于wordGroup。通过合理地设计RDD的转换和动作操作,可以避免不必要的Shuffle操作,提高计算效率。1.对DAG进行反向解析,遇到宽依赖(ShuffleDependency)就断开,遇到窄依赖就把当前的RDD加入到当前的阶段中。由于RDD中是不存储数据的,当计算发生错误的时候,很难重新计算丢失的数据分区。4.一个阶段中的最后一个RDD的分区个数就是Task的个数。原创 2024-01-11 11:01:43 · 1320 阅读 · 0 评论 -
Spark---RDD序列化
序列化是指将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。原创 2024-01-10 15:24:42 · 623 阅读 · 0 评论 -
Spark---行动算子RDD
行动算子可以分为两类:数据运算类和数据存储类。数据运算类算子主要用于触发RDD计算,并得到计算结果返回给Spark程序或Shell界面,例如reduce()函数。数据存储类算子用于触发RDD计算后,将结果保存到外部存储系统中,如HDFS文件系统或数据库,例如saveAsObjectFile()函数。注意:aggregate在使用的时候与aggregateByKey的区别在于:aggregate设置的初始值不仅会与分区内的第一个元素相加,而且还会与分区间的第一个元素相加。原创 2024-01-10 14:38:49 · 1415 阅读 · 0 评论 -
Spark---RDD(Key-Value类型转换算子)
从shuffle的角度来看:为了避免占用过多的内存空间,reduceByKey和groupByKey在执行的过程中,都会执行shuffle操作,将数据打散写入到磁盘的临时文件中,而reduceByKey在进行shuffle前会对数据进行预聚合的操作,致使shuffle的效率得到的提升,因为减少了落盘的数据量。如reduceByKey在shuffle操作后将不同分区的数据传输在同一个分区中进行聚合。mergeCombiners: (C, C) => C): RDD[(K, C)] //分区间合并。原创 2024-01-09 11:44:23 · 2331 阅读 · 0 评论 -
Spark---RDD(双值类型转换算子)
【代码】Spark---RDD(双值类型)原创 2024-01-08 09:57:55 · 783 阅读 · 0 评论 -
Scala学习(十二)---模式匹配
1.样例类仍然是类,和普通类相比,只是其自动生成了伴生对象,并且伴生对象中自动提供了一些常用的方法,比如:apply,unapply,toString,equals,hashCode和copy方法2.样例类是为模式匹配而优化的类,因为默认提供了unapply方法,因此样例类可以直接使用模式匹配,无需自己实现unapply方法3.构造器中每一个参数都是val。原创 2023-06-04 14:37:44 · 932 阅读 · 7 评论 -
Scala学习(十一)---集合高阶
可以看到sliding函数将list3集合分成了四个有三个元素的集合,之后通过product方法对每个集合求乘积,由此来将最大的乘积算出。衍生集合,顾名思义,在scala中,调用一个方法,原集合保持不变,生成一个新的集合。原创 2023-05-26 17:55:42 · 762 阅读 · 0 评论 -
Scala学习(十)---Set和Map
在map中通常使用getOrElse来获取map的值,第一个参数为key值,第二个参数为默认值.getOrElse方法就是根据map的key来获取值,如果根据此key获取不到值,就会使用默认值作为结果返回。可以看到set的打印结果是无序,不重复的,set默认是使用HashSet的,但是如果。添加成功返回true,添加失败返回false。原创 2023-05-26 11:16:57 · 307 阅读 · 0 评论 -
Scala学习(九)---List集合
此处的println方法为官方提供的一个用于遍历输出的方法,通过查看foreach和println方法的源码,可以看到两者可以进行搭配来快速完成对集合的遍历。List集合默认为不可变集合,List集合在实例化的时候,无法通过new关键字进行实例化,只能通过伴生apply方法来对其进行实例化。为了构建链表 第一个结点next指向第二个结点,第二个结点是最后一个结点,所以第二个结点的next要指向空。因为list集合是一个不可变集合,所以在进行插入数据的时候,会把数据全部插入到一个新的list集合中。原创 2023-05-25 16:57:01 · 1194 阅读 · 0 评论 -
Scala学习(八)---数组
【代码】Scala学习(八)---数组。原创 2023-05-25 11:45:48 · 175 阅读 · 0 评论 -
Scala学习(七)---面向对象特质
当一个类继承的父类和特质有同样的具体属性或者方法时候,调用此属性或者方法时,会报错,此时需要重写属性或者方法来解决冲突。一个类具有某种特质,就意味着这个类满足了这个特质的所有要素,所以在使用的时候,也采用了extends关键字,如果有多个特制或者存在父类,那么需要采用with关键字进行连接。可以看到,当一个类中混入多个特质的时候,scala会对所有的特质及其父特质进行一定的顺序进行排序,在上述例子中的顺序为。,也就是说,多个类具有相同的特质的时候,就可以将这个特质独立出来,采用关键字trait声明。原创 2023-05-23 17:34:01 · 704 阅读 · 2 评论 -
Scala学习(六)---apply方法和单例对象
懒汉式占用内存小,线程不安全(两个线程同时为这个对象赋值),可以通过加锁来解决这个问题。Scala中实例化一个类,可以不用new , 其原因 其实就是 apply 方法。饿汉式:没有线程安全的问题,写起来相对简单,占用内存相对较多。scala会在对应的类或者对象中查找apply方法。传递给类实例或者单例对象名一个或者多个对象的时候。默认不会实例化,什么时候用什么时候new。类加载的时候就实例化,并且创建单例对象。并用传入的参数来调用apply方法。且参数列表和传入的参数一致的方法。原创 2023-05-23 13:22:08 · 547 阅读 · 0 评论 -
Scala学习(五)---面向对象
当我们在java中使用多态的时候,属性打印的是父类的属性值,方法是子类的,而使用scala完成多态时,属性与方法打印的都是子类的。定义一个父类Person05,再定义一个子类Student05,在如下代码中,子类继承的父类的从构造器。因为var本来就可以对变量值进行修改,重写是无意义的。第二个辅助构造器调用第一个辅助构造器。即多态:此多态与java中多态不同。可以使用匿名子类来调用抽象类。原创 2023-05-22 16:17:38 · 1012 阅读 · 1 评论 -
Scala学习(四)
那么这个函数和它所处的环境称之为闭包。如果一个函数,访问到了它的。控制抽象分为值调用和名调用。原创 2023-05-12 16:15:14 · 1463 阅读 · 1 评论 -
Scala学习(三)---函数式编程
Scala语言是一个完全面向对象的编程语言。万物皆是对象对象的本质:对数据和行为的一个封装在解决问题的时候,将问题分解成一个个的步骤,将每一个步骤进行封装(函数),通过调用这些封装好的步骤来解决问题。Scala语言是一个完全函数式编程的语言。万物皆是函数。函数的本质:函数可以当成一个值被传递。a.函数无参,无返回值b.无参,有返回值c.有参,无返回值d.有参,有返回值e.多参,无返回值d.多参,有返回值4.函数参数的特殊用法可变参数,在参数后加*如果参数列表中存在多个参数,那么可变参数原创 2023-05-11 15:42:29 · 2354 阅读 · 4 评论 -
Scala学习(二)
Scala内置控制结构特地的去掉了break和continue,是为了更好的适应函数式编程,推荐使用函数式编程的风格解决break和continue的功能,而不是一个关键字。scala中使用breakable控制结构来实现break和continue功能。equals和==,equals比较的为值,= = 比较的为地址。如果代码块中的代码只有一行,大括号可以省略。回顾Java中的运算符。原创 2023-05-10 18:00:14 · 630 阅读 · 3 评论 -
Scala学习(一)
Scala将面向对象和函数式编程结合成一种简洁的高级语言。原创 2023-05-09 17:57:26 · 1084 阅读 · 1 评论