scala
liangzelei
这个作者很懒,什么都没留下…
展开
-
scala特质
所有的面向对象的语言都不允许直接的多重继承,因为会出现“deadlydiamond of death”问题。Scala提供了特质(trait),特质可以同时拥有抽象方法和具体方法,一个类可以实现多个特质。当作接口使用的特质特质中没有实现的方法就是抽象方法。类通过extends继承特质,通过with可以继承多个特质。trait Logger { def log(msg: String)}cl...原创 2018-05-30 15:37:14 · 274 阅读 · 0 评论 -
RDD、DataFrame、DataSet介绍
在 SparkSQL 中 Spark 为我们提供了两个新的抽象,分别是 DataFrame 和DataSet。他们和 RDD 有什么区别呢?首先从版本的产生上来看:RDD (Spark1.0) —> Dataframe(Spark1.3) —> Dataset(Spark1.6)如果同样的数据都给到这三个数据结构,他们分别计算之后,都会给出相同的结果。不同是的他们的执行效率和执行方式。...原创 2018-06-07 10:32:54 · 340 阅读 · 0 评论 -
SparkSQL 用户自定义函数(UDF、UDAF、开窗)
UDF函数通过spark.udf.register("funcName", func) 来进行注册使用:select funcName(name) from people 来直接使用UDAF函数弱类型需要继承UserDefineAggregateFunction并实现相关方法使用:同样是注册一个udf函数import org.apache.spark.SparkConfimport org.ap...原创 2018-06-07 16:37:30 · 6238 阅读 · 0 评论 -
RDD、DataFrame、DataSet互转
如果需要RDD与DS或者DF之间操作,那么都需要引入 import spark.implicits._ 【spark不是包名,而是sparkSession对象的名称】1、RDD 《-》 DataFrame 1、RDD -》 DataFrame (确定Schema) a、直接手动确定: peopleRDD.map{x => val para = x.split(...原创 2018-06-08 10:42:55 · 1726 阅读 · 0 评论 -
SparkSQL的执行模式
1、DSL模式 【通过调用方法】dataFame.select("name").showdataFame.filter($"age" > 25).show2、SQL模式 【通过执行SQL】 1、先创建一张表: 一个SparkContext可以多次创建 sparkSession。 //Session内可访问, 一个SparkSession结束后,表自动删除。...原创 2018-06-08 10:52:22 · 727 阅读 · 0 评论 -
SparkSQL与Hive集成
1、使用内置的Hive 【hive1.2.1】 1、注意:如果发现master节点有 matestore_db出现,删除, 然后,启动客户端 配置: bin/spark-shell --master spark://master01:7077 --conf spark.sql.wareho...原创 2018-06-08 11:21:03 · 767 阅读 · 0 评论 -
scala读取jar包外配置文件的方式
在scala的开发过程中,经常会修改程序的参数,将这些参数放到配置文件中避免了重复编译,然而打包的过程,如果不做配置文件外置,将无法修改配置内容,还是需要重新打包这里给出读取配置文件的三种方式 方式一: 这是最常见的读取配置文件方式val postgprop = new Properties()val ipstream: InputStream = this.getClass().getRes...转载 2018-06-20 08:41:43 · 1245 阅读 · 0 评论 -
scala - 从合并两个Map说开去 - foldLeft 和 foldRight 还有模式匹配
开发中遇到需求:合并两个Map集合对象(将两个对应KEY的值累加)先说解决方案:( map1 /: map2 ) { case (map, (k,v)) => map + ( k -> (v + map.getOrElse(k, 0)) ) } 这特么什么鬼 (╯‵□′)╯""┻━┻☆))>○<) 。。。。。。莫急,且听我慢慢道来。。。。。。。。。首先:Scala中现有的...转载 2018-06-26 21:48:12 · 492 阅读 · 0 评论 -
pregel 与 spark graphX 的 pregel api
简介在Hadoop兴起之后,google又发布了三篇研究论文,分别阐述了了Caffeine、Pregel、Dremel三种技术,这三种技术也被成为google的新“三驾马车”,其中的Pregel是google提出的用于大规模分布式图计算框架。主要用于图遍历(BFS)、最短路径(SSSP)、PageRank计算等等计算。在Pregel计算模式中,输入是一个有向图,该有向图的每一个顶点都有一个相应的独...转载 2018-06-20 10:45:07 · 993 阅读 · 0 评论 -
scala 重命名和隐藏方法
重命名如果你想要引人包中的几个成员,可以像这样使用选取器(selector),而且选取的同时,可以重命名import java.util.{ HashMap=>JavaHashMap, List}import scala.collection.mutable._这样一来,JavaHashMap就是java.utiI.HashMap,而HashMap则对应scala.collection.m...原创 2018-05-30 14:14:30 · 1315 阅读 · 0 评论 -
Spark 广播变量
广播变量用来高效分发较大的对象。向所有工作节点发送一个 较大的只读值,以供一个或多个 Spark 操作使用。比如,如果你的应用需要向所有节点发 送一个较大的只读查询表,甚至是机器学习算法中的一个很大的特征向量,广播变量用起 来都很顺手。传统方式下,Spark 会自动把闭包中所有引用到的变量发送到工作节点上。虽然这很方便,但也很低效。原因有二:首先,默认的任务发射机制是专门为小任务进行优化的;其次,...原创 2018-06-06 13:26:07 · 5095 阅读 · 0 评论 -
RDD算子 转换算子
RDD 中的所有转换都是延迟加载的,也就是说,它们并不会直接计算结果。相反的,它们只是记住这些应用到基础数据集(例如一个文件)上的转换动作。只有当发生一个要求返回结果给 Driver 的动作时,这些转换才会真正运行。这种设计让 Spark 更加有效率地运行。常用的Transformationmap,filter,flatMap,mapPartitions,mapPartitonsWithIndex...原创 2018-06-04 15:55:17 · 1798 阅读 · 0 评论 -
RDD算子 动作算子
reduce(func):通过 func 函数聚集 RDD 中的所有元素,这个功能必须是可 交换且可并联的scala> val rdd1 = sc.makeRDD(1 to 10,2)rdd1: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[85] atmakeRDD at <console>:24scala...原创 2018-06-04 21:00:38 · 478 阅读 · 0 评论 -
数值RDD的统计操作
Spark 对包含数值数据的 RDD 提供了一些描述性的统计操作。 Spark 的数值操作是通过流式算法实现的,允许以每次一个元素的方式构建出模型。这些 统计数据都会在调用 stats() 时通过一次遍历数据计算出来,并以StatsCounter 对象返回。方法 含义count()RDD中的元素个数mean()元素的平均值sum()总和max()最大值min()最小值variance()...原创 2018-06-04 21:06:25 · 3897 阅读 · 0 评论 -
Scala安装与配置
Scala需要Java运行时库,安装Scala需要首先安装JVM虚拟机,推荐安装JDK1.8在https://www.scala-lang.org/download/all.html 下载Scala2.11.8程序安装包根据不同的操作系统选择不同的安装包,下载完成后,将安装包解压到安装目录。将scala安装目录下的bin目录加入到PATH环境变量:SCALA_HOME:SCALA_HOME= D:...原创 2018-05-29 08:53:13 · 604 阅读 · 0 评论 -
scala类型介绍和使用
常用类型介绍Scala有8种数据类型:Byte、Char、Short、Int、Long、Float、Double以及Boolean。 Booleantrue 或者 falseByte8位, 有符号Short16位, 有符号Int32位, 有符号Long64位, 有符号Char16位, 无符号Float32位, 单精度浮点数Double64位, 双精度浮点数String其实就是由Char数组组...原创 2018-05-29 09:16:14 · 1155 阅读 · 0 评论 -
Spark Streaming概述
1、Spark Streaming用于处理流式计算问题。能够和Spark的其他模块无缝集成。2、Spark Streaming是一个粗粒度的框架【也就是只能对一批数据指定处理方法】,核心是采用微批次架构。和Storm采用的以条处理的不同。3、Spark Streaming会运行接收器来不断的接收输入的数据流,然后根据程序配置的时间,将时间范围内的所有数据打成一个RDD,发送给Spark Core去...原创 2018-06-12 10:35:27 · 12481 阅读 · 0 评论 -
scala集合综合应用
集合与函数的映射map:将集合中的每一个元素映射到某个函数val names = List("Alice","Bob", "Nick")println(names.map(_.toUpperCase))flatmap:将集合中的每个元素的子元素映射到某个函数并返回新的集合val names = List("Alice","Bob", "Nick")println(names.flatMap原创 2018-05-29 17:05:01 · 231 阅读 · 0 评论 -
Scala模式匹配
switch与default等效的是捕获所有的case_ 模式。如果没有模式匹配,抛出MatchError,每个case中,不用break语句。可以在match中使用任何类型,而不仅仅是数字。举例如下:var result = 0;val op : Char = '-'op match { case '+' => result = 1 case '-' => result...原创 2018-05-30 10:39:35 · 573 阅读 · 0 评论 -
RDD 累加器
累加器累加器用来对信息进行聚合,通常在向 Spark 传递函数时,比如使用map() 函数或者用 filter() 传条件时,可以使用驱动器程序中定义的变量,但是集群中运行的每个任务都会得到这些变量的一份新的副本, 更新这些副本的值也不会影响驱动器中的对应变量。 如果我们想实现所有分片处理时更新共享变量的功能,那么累加器可以实现我们想要的效果。针对一个输入的日志文件,如果我们想计算文件中所有空行的...原创 2018-06-06 13:22:44 · 1349 阅读 · 0 评论 -
Flume直接到SparkStreaming的两种方式
一般是flume->kafka->SparkStreaming,如果非要从Flume直接将数据输送到SparkStreaming里面有两种方式,如下:第一种:Push推送的方式程序如下:package cn.lijieimport org.apache.log4j.Levelimport org.apache.spark.streaming.flume.FlumeUt...转载 2018-07-21 11:32:50 · 1361 阅读 · 2 评论