spring boot java项目整合Scala&Spark,接口api调用方式调用scala代码,配置分享

版本说明:

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会报错

途中碰到各种困难,可以尝试以下方法

  1. maven先clean

  1. 然后install

  1. 然后重启idea

也可重新编译代码

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值