版本说明:
spring boot:2.5.9
jdk:1.8
spark:2.4.5
sclala:2.11.12
首先你需要有一个完美的spring boot项目(java版本)能成功运行,这就不赘述了,按照网上的自己搭建吧,然后重要的来了,我捣鼓了两天时间,各样的报错见过了,网上的处理方法要嘛是不全,要嘛是没有用,各种办法都试过,我只分享我成功后的配置,
xml配置添加:(scala环境和spark环境)
在原有的<dependencies>依赖里面添加下面的依赖,然后在<plugins>里面添加scala编译依赖,不然编译不通过,会报错找不到符号
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.11.12</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.4.5</version>
</dependency>
<!-- 加入Scala的编译插件,否则无法进行编译-->
<plugin>
<groupId>org.scala-tools</groupId>
<artifactId>maven-scala-plugin</artifactId>
<version>2.15.2</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
service层,注意前端调用scala接口,那么scala服务的所有代码都需要用scala代码编写,不能跟java代码混编(会报错:包导入成功了但是运行时报错找不到包)
scala service层测试代码
package com.jack.graduation.service
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
import org.springframework.stereotype.Service
@Service
class TestService {
def test(): Boolean = {
true
}
def wc(): Map[String, Int] = {
val sparkConf: SparkConf = new SparkConf()
.set("spark.driver.host", "myword")
.setAppName("test_scala")
.setMaster("local[*]")
val sc = new SparkContext(sparkConf)
val fileRDD: RDD[String] = sc.textFile("D:/idea2020/IdeaProjects/graduation/src/main/resources/files/a.txt")
val tempRDD: RDD[String] = fileRDD.flatMap(_.split(" "))
val mapRDD: RDD[(String, Int)] = tempRDD.map((_, 1))
val map: Map[String, Int] = mapRDD.reduceByKey(_ + _).collect().toMap
println("testmap"+map)
sc.stop()
map
}
}
scala controller层测试代码
package com.jack.graduation.controller
import com.jack.graduation.service.TestService
import javax.annotation.Resource
import org.springframework.web.bind.annotation._
/**
*
* @param test
*/
@RestController
@RequestMapping(Array("/sparkCon"))
class CustomerController @Resource()(test: TestService) {
@GetMapping(Array("/test"))
def test(): String = {
val bool: Boolean = test.test()
println(bool)
"hello scala"
}
@GetMapping(Array("/wc"))
def wcTest(): Boolean = {
val stringToInt: Map[String, Int] = test.wc()
println("wcmap" + stringToInt)
stringToInt.nonEmpty
}
}
注意上面的服务层代码的导入方式: @Resource()(test: TestService),如果通过@Autowired会报错
途中碰到各种困难,可以尝试以下方法

maven先clean
然后install
然后重启idea文章来源:https://www.toymoban.com/news/detail-497140.html

也可重新编译代码文章来源地址https://www.toymoban.com/news/detail-497140.html
到了这里,关于spring boot java项目整合Scala&Spark,接口api调用方式调用scala代码,配置分享的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!