Spark+smile项目(一):各种初探,包括文件读写,Bug解决等。

在IDEA构建了一个spark+smile的maven项目,用起来还是有各种bug。继续记录。


需求:smlie2.5.3版本的kmeans需要一个二维数组 Array[Array[Double]]类型作为输入。并且我要在spark环境下去读数据(因为后面要上集群测试)。

import smile.clustering.KMeans

def kmeans(data: Array[Array[Double]], k: Int, maxIter: Int = 100, tol: Double = 1E-4, runs: Int = 10): KMeans

数据格式:用的是smile的data里某个数据(txt)



一开始我没有找到怎么把RDD转成数组,经过多次的试验,终于总结了两行的最简洁的代码。


中途遇到了很多各种各样的关于数据转换的问题和报错,也有关于smile版本的错误,关于pom文件的修改,只需要这样即可。在本机我用了2.6.0版本,你会发现smile包更新得太快了,很多操作有时官网上已经给出事例,但是就是在实际测试中使用不了。



主要是前两个即可


val a = KMeans.fit(csv1,6,100,1E-4)//接下来是跑kmeans


本机结果


于是我就把包和依赖和文件(文件放进了hdfs才可以读,因为是用yarn模式)放进集群得环境,代码不用变。不改变partition数量(默认为2)的情况下,与本机结果(在本机上改partition数量,结果不会改变)一样。

关于读文件,涉及了很多次读不到的问题,与集群服务器的位置有关(主要是端口号),所以最好是放到hdfs上。根据这篇文章进行操作。



放到集群上,也可以用hue,一开始并没找到


然后根据路径操作即可:



如果是使用jupyter里的终端的话,好像就不用,因为端口号一样,可以读到。如果是不在这个端口号的,例如我用的是其他软件打开终端,就不行。

在集群上,如果改变partition数量,结果是不一样的。



关于画图这个,scala里还没有特别好的画图包,有个smile的自带,但是不work,有个breeze,也不太好用。要尝试用大点的数据,新的读方式RSP来进行进一步的实验。


可视化


博客地址

你可能感兴趣的:(Spark+smile项目(一):各种初探,包括文件读写,Bug解决等。)