本文所用的ide是scala eclipse,传送门
数据集用的是MovieLens的ml-100k, 传送门
以后会加入intellij idea的配置……
建立Scala项目
- 进入eclipse ide后,点击左上角的icon,然后点击Scala Project
- 建立Scala Project,输入Project name,我用的都是ScalaSparkLearning
JRE记得要选对,选择你自己的机器上的JRE,然后finish
-
此时在IDE左边就出现了我们的Project tree,
/src/
就是我们工作的地方
-
在我们的Project根目录上右键,创建一个package,这个跟java很像,类似于用maven来管理java项目的package的创建。
我用的是我自己的名字,com.ephraim.spark。这里看随意。
然后finish
此时我们的Scala项目就建立好啦。下一步我们就来写一个Spark应用吧!
我的第一个Spark应用
我非常建议,如果不是太熟悉scala并且对函数式编程也不熟悉的小伙伴,一定要去先看看这两个东西。不然以来就整Spark会比较懵。
-
建立项目喽!
在我们刚刚创建的package上右键,然后选择Scala Object,我的文件名是RatingsCounter,这里随意了,然后finish
此时我们发现我们的Object已经创建好了。和Java一样,Object虽然不存在于Java,但是在Scala里面也是要和文件名一样。
-
然后我们就开始写代码吧!
- 先引入需要的package
import org.apache.spark._ import org.apache.spark.SparkContext._
- 然后定义一个function在我们的Object里面。
在scala里面,function是用def funcName()
来定义的
object RatingsCounter { /** 主方法,相当于Java的main方法*/ def main(args: Array[String]) { // 创建了一个SparkContext // local[*],代表了使用所有本地CPU核心去计算 // 这个SparkContext的名字是RatingsCounter val sc = new SparkContext("local[*]", "RatingsCounter") // 使用sc.textFile的方法,将我们的数据集读入。类似python的pandas.csv('./ml-100k/u.data') // 此处要注意,textFile索引文件的时候,是从我们的项目的根目录下索引的 // 所以ml-100k是在我们SparkScalaLearning这个根目录下的。 val lines = sc.textFile("./ml-100k/u.data") // Convert each line to a string, split it out by tabs, and extract the third field. // (The file format is userID, movieID, rating, timestamp) val ratings = lines.map(x => x.toString().split("\t")(2)) // Count up how many times each value (rating) occurs val results = ratings.countByValue() // Sort the resulting map of (rating, count) tuples val sortedResults = results.toSeq.sortBy(_._1) // Print each result on its own line. sortedResults.foreach(println) } }
这里如果有不知道啥是SparkContext的小伙伴,可以看我另一篇Spark RDD的介绍和应用
关于数据集的位置有疑惑的,我上个图
wow,这样我们代码就写完了!快来运行一把!!
等等先别着急……
-
设置External Jars和Scala版本
这几个红叉叉看的真不爽……咋回事呢……
因为我们的scala eclipse ide,还不够智能,我们智能人工来配置这个项目的编译的jar packages。
我们在根目录上右键,点击Properties
在弹出的窗口中选择 Java Build Path,再选中Libraries
- 在右边的选项中点击Add External JARs,去到系统的apache-spark的sdk目录,然后找到jar文件夹,选中里面所有的.jar文件,对,是所有!
用mac的小伙伴如果是用brew安装的,可以直接到/usr/local/Cellar/apache-spark/2.4.5/libexec
来找。
用win的小伙伴直接去安装目录下就可以找到了,非常简单。
最后点击右下apply and close
现在看我们的项目是不是一个错误都没有了呢,嘿嘿嘿。
有的小伙伴估计要哭了,因为貌似出现了更多的错误。
这个是因为Scala的版本问题,途中Scala需要的版本是2.11.*,而我们现在的版本是2.12.3。这个可以直接看Project Tree那边。
所以我们现在要修改当前的Scala版本
我们再去根目录右键,Properties。这次点击Scala Compiler,然后选中Use Project Settings,接下来就可以选择我们需要的Scala版本了。这里我们选择2.11
然后右下的apply and close, 世界终于安静了。
- 终于终于我们要来run一下了!
先不要急哈,我们先配置一下运行环境,呵呵呵,确实好麻烦……我应该用intellij的……
在跳出的窗口选择Scala Application,然后右键 -> new
此时在新窗口的Main class一项中填写刚才我们的RatingsCounter的完整包路径:com.ephraim.spark.RatingsCounter
然后点击右下的apply,再点击run,然后boom
(1,6110)
(2,11370)
(3,27145)
(4,34174)
(5,21201)
各位小伙伴是不是跟我拿到了一样的结果呢?
欢迎留言交流哦!