真的,之前在学了实验楼线上环境的课,线上环境用着也舒服,我以为我spark入门了。
然后之前有一段时间去欢快地研究了机器学习,sciki-learn是真的好用。
然后,我复习了一下之前spark-mllib,感觉思路一下子清晰了很多,因为理解了调的包是个什么东西了,而且还知道了spark自带的数据结构“Labeled Point”,
这种数据结构让spark使用自己的监督学习算法的包的时候与scikit-learn工具库有很大不同。
为啥这么说呢,举个scikitlearn的例子,这是个支持向量机算法建模的例子,简简单单两句话
然后这里面X_train是训练接特征,y_train是训练集目标(也叫标签)
model = SVC(C=10,gamma=0.001)
model.fit(X_train, y_train)
spark-mllib就不一样了
截一张我原来的图
它的训练集输入只有一个,原因就是Labeled Point,这个数据结构是有Label的
也就是说它把训练集特征和训练集目标结合到一起了,有趣吧,来一发专业解释
标签点(Labeled Point)是一个本地向量,也分稀疏或者稠密,并且是一个带有标签的本地向量。
在 MLlib 中,标签点常用于监督学习类算法。标签(Label)是用 Double 类型存放的,因此标签点可以用于回归或者分类算法中。如果是二维分类,标签则必须是 0 或 1 之间的一种。而如果是多个维度的分类,标签应当是从 0 开始的数字,代表各个分类的索引。
标签点是由一个名为 LabeledPorint 的 Case Class 定义的。在 Spark Shell 中输入下面的代码来创建标签点。
// 首先需要引入标签点相关的类
import org.apache.spark.mllib.linalg.Vectors
import org.apache.spark.mllib.regression.LabeledPoint
// 创建一个带有正面标签和稠密特征向量的标签点
val pos = LabeledPoint(1.0, Vectors.dense(1.0, 0.0, 3.0))
// 创建一个带有负面标签和稀疏特征向量的标签点
val neg = LabeledPoint(0.0, Vectors.sparse(3, Array(0, 2), Array(1.0, 3.0)))
其实,上面这些都不是我今天想说的,
我今天想说的是给spark用的打包工具sbt是咋要了我的狗命的
问题
什么意思呢,就是python有python的shell,scala也有scala的shell,
这个spark吧不是个语言,但是也有shell,
能输scala来操纵spark计算的,叫spark-shell,
能输python来操纵的叫pyspark。
之前我写的那些都是在sparkshell里做的。
然后吧,我在本地自己搭了服务器集群了,这几周做spark-mllib的机器学习也很顺滑。
下面新的问题就来了
我现在都会做了,但是最后交的成果总不能是个录屏,记录在虚拟机里一行一行往spark-shell输代码,最后把spark-shell吐出来的结果录下来
那不是显得我很没有牌面。
于是乎
我装上了sbt,试了一个最简单的wordcount项目,还没调用别的什么库呢,就是一个wordcount
目录结构大概是这样的,在编译之前是没有target的,target以外的要自己建,这个wordcount不复杂,编译之前project就没放东西,src里面有个main文件夹,放我的wordcount源码,至于simple.sbt就比较重要了,写的是版本啊依赖啊的相关信息
simple.sbt是这么写的
然后,我输了一个最让我后悔的命令。sbt package,在wordcount项目的根目录里输的
没错,我看着它从maven中央仓库更新的进度跳了将近一个小时,终于我怀着沉重的心情ctrl+c
然后我挂上了某种科学的上网的工具,,,并没有多大用,陷入了僵局,前面的过程我重复了N次,几乎大半天过去了。
解决
然后我干了什么呢,虚拟机重启,结果虚拟机没有网了,死活连不上网,NetworkManager要是活的都快能让我配出精神分裂了。
那么重启主机,然后看到有人说nat网速快,再把桥接换成了nat。
然而,
然后,我又挂上了那个,让我无比失望的,科学的上网工具
结果
哈哈,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
真的,我现在心情很复杂,这要不是我没课在家网好,要是天天上课,再加上学校网不好,我基本废了。
分析总结
- sbt要从maven中央仓库更新,这个东西应该被墙了,所以要么按着网上的各种改国内仓库的方法改(我搜到的帖子里没一个能在我这里用的,一方面是oschina在16年停了它的仓库,另一方面我版本可能太新)。要么就科学的上网。
- 回忆起来,昨晚我关虚拟机是挂起的,没有关机,挂起恢复之后虚拟机网速就变成几B了,所以需要虚拟机有网速的时候,还是重启一下?
- NAT比桥接模式网速快
- 虚拟机网没了,输service NetworkManager restart也没有用,除了ubuntu不如debian稳定之外,问题也可能出在主机上,主机的vm虚拟网卡不好弄,重启也有效