在虚拟机使用idea sbt工程本地模式运行spark wordcount程序,报错Module ‘Main‘ production: sbt.internal.inc.CompileFailed

我在做《Spark与集群技术》实验中的wordcount中出现了如图问题,因为之前一直在hadoop集群相关实验遇到最多的问题是 库之间的版本不兼容。我开始就是这样认为的,当实际是版本没问题,而是虚拟机的idea反应慢,没有将所需的依赖导入完成。

以下是我的版本配置:

Spark 2.4.0

Scala 2.12.19

jdk11
这个配置是没问题的。

解决方案是多尝试几次如下实验流程(亲测有效)

实验流程:

1.File  --> Settings 

下载scala插件,下载完后会出现一个restart,点击restart重启idea即可

2.File --> new --> project

下载完插件scala后新建工程会多出scala这一栏

我们一般都是jdk1.8,这里是jdk11,没有的直接载idea里面下载。

3.

我们创建完后,左上角会提示我们 没有Scala sdk ,问题不大,点击右上角的Setup Scala SDK
下载我们需要的版本scala 2.12.19

4.

下载完后还需更改,build.sbt里的内容如图

name := "Main"

version := "0.1"

scalaVersion := "2.12.19"

libraryDependencies += "org.apache.spark" %% "spark-core" % "2.4.0"

记住更改完后,记得点击图右上角的我用红框标注的地方,开始导入我们所需的依赖,这里需要同学们有耐心,因为在虚拟机中导入慢,idea反应慢,一定要等到它导入完依赖,否则在没有导入完后就运行spark wordcount程序会出现我的错误。

运行结果:


附上wordcount代码,文件地址记得改成自己的呦0.o

object WordCount {
  import org.apache.spark.rdd.RDD
  import org.apache.spark.{SparkConf, SparkContext}

  def main(args: Array[String]): Unit = {
    //1.创建SparkConf对象,设置appName和Master地址
    val sparkconf = new SparkConf().setAppName("wordCount").setMaster("local[2]")
    //2.创建SparkContext对象,它是所有任务计算的源头,它会创建DAGScheduler和TaskScheduler
    val sparkContext = new SparkContext(sparkconf)
    //设置日志级别
    //sparkContext.setLogLevel("WARN")
    //3.读取数据文件,RDD可以简单的理解为是一个集合,集合中存放的元素是String类型
    val data : RDD[String] = sparkContext.textFile("要统计单词文件地址")
    //4.切分每一行,获取所有的单词
    val words :RDD[String] = data.flatMap(_.split(" "))
    //5.每个单词记为1,转换为(单词,1)
    val wordAndOne :RDD[(String, Int)] = words.map(x =>(x,1))
    //6.相同单词汇总,前一个下划线表示累加数据,后一个下划线表示新数据
    val result: RDD[(String, Int)] = wordAndOne.reduceByKey(_+_)
    //7.收集打印结果数据:从分布式内存中收集计算结果,是一个数组
    val finalResult: Array[(String, Int)] = result.collect()
    //将定长数组转为不定长数组,并打印每个元素后换行
    finalResult.foreach{ case (word, count) => println(s"$word: $count\n") }
    //8.关闭sparkContext对象
    sparkContext.stop()
  }
}

小知识分享:sparkContext.textFIle()中,总的来说有两个参数,分别是文件的路径和最小分区数,文件的路径可以是文档、文件夹、一个包含多个文件路径的列表和使用通配符来匹配多个文件。最小分区数也就是(minPartitions参数),minPartitions 参数在 Spark 中用于指定 RDD 的最小分区数。当使用 sc.textFile 方法读取文本文件时,Spark 会将文件分割成多个分区,每个分区由一个或多个记录组成。minPartitions 参数可以帮助你控制分区的数量,从而影响数据处理的并行度。分区数不应该太小,否则可能会导致单个分区过大,影响处理效率。同样,分区数也不应该太大,否则可能会导致每个分区过小,增加调度开销。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值