版本说明:
spring boot:2.5.9
jdk:1.8
spark:2.4.5
sclala:2.11.12
首先你需要有一个完美的spring boot项目(java版本)能成功运行,这就不赘述了,按照网上的自己搭建吧,然后重要的来了,我捣鼓了两天时间,各样的报错见过了,网上的处理方法要嘛是不全,要嘛是没有用,各种办法都试过,我只分享我成功后的配置,
xml配置添加:(scala环境和spark环境)
在原有的
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
也可重新编译代码
相关链接
发表评论