
Hadoop-Scala-Spark
五道口纳什
wx公众号/B站:五道口纳什
展开
-
scala 偏函数与 map/collect
https://fangjian0423.github.io/2015/06/14/scala-partial/https://www.jianshu.com/p/fa2ed7ed391e0. collect 与 map 的区别由于collect方法接收的是一个偏函数类型,所以它并不能接收一个lambda表达式:scala> List(1, 3, 5, "seven").co...原创 2019-01-30 19:37:35 · 1971 阅读 · 1 评论 -
Spark 基础 —— Map 容器
mapValuesmapValues 顾名思义,仅对 values 进行映射,也即 key 保持不变,所以要求,原始数据必须是键值对。val animals = sc.parallelize(List("Dog", "Cat", "Tiger"), 2)val m1 = animals.map(x => (x.length, x))val m2 = m1.mapValues("x"+_+"x")原创 2016-04-21 22:21:17 · 1237 阅读 · 0 评论 -
spark-shell 基本用法
spark-shell 是 scala 语言的 REPL(Read-Eval-Print-Loop,通俗地理解就是命令行模式) 环境,同时针对 spark 做了一些拓展。1. 启动 spark-shell 的方法1.1 本机$ spark-shell --master local[N]$ spark-shell --master local[*]通过设定local[N]参数来启动本地 Spark原创 2016-06-05 16:35:50 · 5775 阅读 · 0 评论 -
Exception in thread “main” java.lang.NoClassDefFoundError: com/google/common/base/Preconditions
问题原因,缺少 hadoop 提供的相关 jar 包,也即 guava-版本号.jar。 此 jar 包的位置,在 hadoop 目录下的/share/hadoop/tools/lib.参考: 1. Exception in thread “main” java.lang.NoClassDefFoundError: com/google/common/base/Preconditions原创 2016-06-01 08:53:56 · 27275 阅读 · 0 评论 -
Spark 编程工具类与工具方法(一)—— 欧式距离
def euclidean(x: Vector[Double], y: Vector[Double]) = { math.sqrt(x.toArray.zip(y.toArray). map(p => p._1 - p._2).map(d => d*d).sum)}原创 2016-04-23 16:35:44 · 3379 阅读 · 1 评论 -
Scala 基础 —— String(StringOps)、tuple、Range
scala> val rawData = sc.textFile("...")rawData: org.apache.spark.rdd.RDD[String]val line = rawData.firstline: Stringsplit()和 Java/Python 中的 String 类一样,得到一个 String 构成的数组scala> val pieces = li原创 2016-04-23 15:41:23 · 3831 阅读 · 0 评论 -
scala 基础 —— 函数(柯里化)
与 Java/c++ 不同的是,scala 并未提供 ++ 和 – 操作符;不带参数的 scala 方法通常不使用圆括号;scala> "hello".distinctString = helo1. 数值类型转换:用(成员)方法而不是强制类型转换scala&原创 2017-08-01 21:09:27 · 843 阅读 · 0 评论 -
scala 与 spark 并行化
1. .par普通集合转换为并行集合scala.collection:scala> (1 to 5).foreach(println(_))12345scala> (1 to 5).par.foreach(println(_))13254注意既然是并行化处理,即一个集合不同的元素由不同的线程操作,不同线程执行的顺序是无法保证的;获取线程名:scala>...原创 2019-01-30 19:06:13 · 1546 阅读 · 2 评论 -
Spark utils —— 设置日志级别
1. 通过 SparkContext 指定日志级别val sc: SparkContext = new SparkContext(sparkConf)sc.setLogLevel("WARN")//sc.setLogLevel("DEBUG")//sc.setLogLevel("ERROR")//sc.setLogLevel("INFO")原创 2019-01-22 22:14:45 · 2117 阅读 · 3 评论 -
Spark 调优 ——cache(persist)与 checkpoint
cache 是对 persist 的进一步调用;1. 为什么要 checkpoint为了保证数据安全性,需要对运行出的中间结果进行 checkpoint最好将结果 checkpoint 到 hdfs,便于集群所有节点进行访问;checkpoint 之前先进行 cache(persist),将数据放在缓存中什么时候 checkpoint:在发生 shuffle 之后做 ch...原创 2019-01-13 22:07:42 · 1154 阅读 · 0 评论 -
Spark 原理 —— 从 akka 到 spark 集群的启动
1. actor 到 akkaActor 是一种消息并发模型,基于事件模型的并发机制。Scala 的 Actor 类似于 Java 中的多线程编程,不同在于:Scala 的 Actor 设计的初衷在于尽可能地避免锁和共享状态,从而避免多线程并发时出现资源征用的情况;原因在于,Java 中多数使用的是可变状态的对象资源,对这些资源进行共享实现多线程编程的话,需要控制好资源竞争与防止对象状...原创 2018-11-11 19:14:09 · 1685 阅读 · 2 评论 -
scala 编程 ——类型限定与泛型编程
OOP:面向对象编程,代表 Java; GP:泛型编程,代表 STL; FP:函数式编程,代表 Python,Scala;map/reduce之前的文章,包括一系列的 Python Tricks,这里不再赘述;filter基于一个返回布尔值的函数对元素进行过滤:def remove_all(seq, elem): return filter(lambda x: x != ele原创 2016-05-19 16:18:25 · 1235 阅读 · 0 评论 -
scala 基础类库 —— 文件操作
下面哪个 Linux 命令可以一次显示一页内容?A. pause; B. cat; C. more; D. grep。cat:由第一行开始显示文本内容,一次性显示全部;tac:从最后一行开始显示,可以看出 tac 是 cat 的倒写形式;nl:显示的时候顺便显示行号;more:一页一页的显示文本内容;less:与 more 类似,但是比 more 更好用的是,它可以往前翻页;head:只看原创 2016-04-12 08:24:06 · 1551 阅读 · 0 评论 -
scala 基础 ——关键字与特殊符号
1. 开发人员个人喜好Python:大蟒蛇;Java:爪哇岛,Tomcat:公猫2. 自嘲apache:a patchy server,3. 首字母与缩略caffe:matlab:matrix laboratory原创 2017-10-09 22:17:13 · 1160 阅读 · 0 评论 -
Spark —— RDD、DataFrame 与 Dataset
1. 算符优先级C/C++:位运算符(&|^)的优先级要低于比较运算符(==/!=)对于 Python 语言来说,位运算符(&|^)的优先级却要高于比较运算符(==/!=)原创 2016-10-16 11:30:27 · 1023 阅读 · 0 评论 -
mac 下 hadoop、spark 的安装及配置
until vs tountil 不包括右端点; to 包括右端点;原创 2016-04-21 22:39:46 · 1088 阅读 · 0 评论 -
Spark 机器学习 —— KMeans
创建模型所对应的类及模型训练import org.apache.spark.mllib.clustering.KMeansval kmeans = new KMeans()val model = kmeans.run(data) # 要求 data 的类型为 RDD[Vector]显示模型训练的结果model.clusterCenters.foreach(println原创 2016-04-23 16:15:43 · 1114 阅读 · 0 评论 -
Spark standalone 模式下的集群部署
版本!一、准备工作(1)安装 jdk (建议 jdk7 以上)[root@hadoop0 ~]# echo $JAVA_HOME/usr/local/jdk[root@hadoop0 ~]# java -versionjava version "1.8.0_73"Java(TM) SE Runtime Environment (build 1.8.0_73-b02)Java HotSp原创 2016-03-19 00:06:01 · 1987 阅读 · 0 评论 -
Spark MLlib(一)正则化特征
Spark 在其 MLlib 机器学习库中内置了一些函数用于特征的缩放和标准化。(1)StandardScaler:标准正太变换(2)Normalizer:特征向量正则化(范数为1,xi∥x∥\frac {x_i}{\|\mathbf x\|})pysparkfrom pyspark.mllib.feature import Normalizernormalizer = Normalizer原创 2016-04-01 11:14:10 · 3159 阅读 · 0 评论 -
numpy.ndarray.flat/flatten 与 Spark 下的 flatMap
numpy.ndarray.flat/flattenflat:使平坦,在编程上就对应着二维变一维。(1)numpy.ndarray.flat 和 numpy,ndarray.T 一样不是函数调用,因此不可以跟函数调用操作符(也即一对小括号),因此也不可以指定平坦化的参数,比如按行平坦还是按列平坦,其默认的 flat 的动作是逐行(row-major)进行的。>>> import numpy as原创 2016-04-01 10:03:31 · 4258 阅读 · 0 评论 -
Trick(二)——获取一个网页的 title 信息
所谓网页的 title 信息,就是在一个浏览器打开一个网页,在浏览器的顶部显示的标题信息。那么又该如何获取这一 title 信息,进行拷贝,而不是手动输入呢?ctrl + shift + i:进入开发者工具,找到页面的 title 标签,即可获取此网页的 title 信息:原创 2016-03-20 09:22:50 · 1724 阅读 · 0 评论 -
Scala 类型、数值类型及类型转换
一、启动切换到 Spark 的根目录,使用 bin/spark-shell 进入 spark shell:[root@ahdoop0 spark-1.3.0-bin-hadoop2.4]# ./bin/spark-shell...scala> 启动的过程中会有如下的提示:16/03/18 13:53:47 INFO Utils: Successfully started service 'Spa原创 2016-03-18 18:02:11 · 2391 阅读 · 0 评论 -
Spark 基础——RDD 算子
一、什么是 RDD?(1)RDD 是 Spark 最基本也是最根本的数据抽象(2)RDD 它具备像 MapReduce 等数据流模型的容错性,为了实现容错,RDD 提供了一种高度受限的共享内存,即 RDD 是只读的,并且只能通过其他 RDD 上的批量操作来创建。(3)它允许开发者在大型集群上执行基于内存的计算现有的数据流系统对以下两种应用的处理并不高效:(1)迭代式算法,而这在图应用和机器原创 2016-03-19 12:28:32 · 1522 阅读 · 0 评论 -
Spark 基础 —— sc.broadcast
broadcast,广播,顾名思义,就是分布式集群环境下,将数据从一个节点发送到其他各个节点上去。这样的场景很多,比如 driver 上有一张表,其他节点上运行的 task 需要 lookup 这张表,那么 driver 可以先把这张表 copy 到这些节点,这样 task 就可以在本地查表了。如何实现一个可靠高效的 broadcast 机制是一个有挑战性的问题。先看看 Spark 官网上的一段话:原创 2016-04-01 11:02:56 · 9671 阅读 · 0 评论 -
Spark 基础 —— RDD(创建 RDD)的两种方式
弹性分布式数据集(Resilient Distributed Dataset),简称 RDD,RDD 是 Spark 所提供的最基本的数据抽象,代表分布在集群中多台机器上的对象集合。Spark 有两种方法可以创建 RDD:(1)用 SparkContext 基于外部数据源创建 RDD,外部数据源包括 HDFS 上的文件通过 JDBC 访问的数据库表Spark shell 创建的本地对象集合原创 2016-04-23 15:36:37 · 2053 阅读 · 0 评论 -
Spark 基础 —— RDD(一)
Spark 为 RDD 提供的成员函数(1).stats()序列的数字特征(stats:statistics),包括(count:计数,mean:均值,stdev:标准差,max:最大,min:最小值)原创 2016-03-31 19:06:37 · 1321 阅读 · 0 评论 -
Scala 集合 —— Array、Map、Seq、Set
Scala 集合类库很庞大,包括 List,Set,Map,Array等。利用 toList,toSet 和 toArray 方法,各种集合类型可以方便地互相转换。MapScala 的 Map 类没有提供根据内容的键或值排序的方法,当我们可以将 Map 转换为 Scala 的 Seq 类型,而 Seq 支持排序。Scala 的 Seq 类和 Java 的 List 接口类似,都是可迭代集合,即具有确原创 2016-04-21 22:36:37 · 11904 阅读 · 1 评论 -
Spark 机器学习拾遗
LabeldPointSpark MLlib 将特征向量抽象为 LabeldPoint,它由一个包含多个特征值的 Spark MLlib Vector 和一个称为标号(label)的目标值组成。该目标值为 Double 类型,而 Vector 本质上是对多个 Double 类型值的抽象,这说明 LabeldPoint 只适用于数值型特征。但需经过适当编码,LabeldPoint 也可用于类别型特征。原创 2016-04-22 11:34:57 · 1136 阅读 · 0 评论 -
Spark 机器学习 —— 从决策树到随机森林
构造训练数据import org.apache.spark.mllib.linalg.Vectorsimport org.apache.spark.mllib.regression.LabeledPointval rawdata = sc.textFile("covtype.data")val data = rawdata.map{ line => val row = line.spli原创 2016-04-22 11:52:24 · 1848 阅读 · 0 评论 -
Spark MLlib 编程
数据集的构造val rawData = sc.textFile("...")val data = rawdata.map{ line => val row = line.split(',').map(_.toDouble) val featVec = Vectors.dense(row.init) val label = row.last LabeledPoint(原创 2016-04-22 11:57:56 · 1189 阅读 · 0 评论 -
Spark 机器学习 —— ALS
ALS(Alternating Least Squares),交替最小二乘法;以下的三点原因:稀疏的输入数据,可用简单的线性代数运算求解最优解,数据本身的可并行化使得 ALS 在大规模数据上速度非常快,也解释了为什么到目前为止 Spark MLlib 只有 ALS 一种推荐算法。原创 2016-04-22 09:41:26 · 1400 阅读 · 0 评论 -
Spark 基础 —— class与object,面向对象、类与伴生对象(companion object)
只要分析过的任务可能会重复出现,就值得花时间改善代码。对缺失值分析而言,我们的第一个任务就是写一个类似于 Spark StatCounter 类的东西,以正常处理缺失值。import org.apache.spark.util.StatCounterclass NAStatCounter extends Serializable { val stats: StatCounter = new原创 2016-04-22 08:56:41 · 3097 阅读 · 0 评论 -
使用 IDEA 创建 Scala 工程
(1)打开 IDEA[root@hadoop idea] ./bin/idea.sh(2)File ⇒ New ⇒ Project … ⇒ 选择 Scala填写工程名 选择 Scala-SDK(就是解压后的 Scala 文件夹)(3)File ⇒ Project Structure… ⇒ Modules,在 src 原下创建如下文件夹 (4)导入 Spark 的包,在 【Project原创 2016-03-30 10:05:28 · 7932 阅读 · 0 评论