可以在一个Controller里面实现spark抓取的代码:
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.servlet.ModelAndView;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.SparkConf;
import org.springframework.web.bind.annotation.ResponseBody;
/**
* @author flash胜龙
*/
@RestController
public class DataFigureController {
@RequestMapping("/dataimportlocal.html")
public ModelAndView dataimportlocal() {
System.setProperty("hadoop.home.dir", "D:\\hadoop-2.7.2test");
System.setProperty("HADOOP_USER_NAME", "hadoop");
SparkSession spark = SparkSession.builder().master("local[*]").appName("Word Count").config("spark.sql.warehouse.dir", "file:///d:/tmp").getOrCreate();
Dataset<Row> df = spark.read().option("header", true).csv("D:\\book.csv");
df.show();
return new ModelAndView("dataimport");
}}
Maven配置如下(英 ['meɪv(ə)n] 美 ['mevn])
其中有不少坑:一个是包冲突问题,hadoop、spark和springboot体系里面每个都自己引用了一系列logger实现的包,一起编译运行会有冲突,对部分包的依赖要exclusions掉;二个是版本问题,对于要使用的版本,必须整个工程前后一致。如果一个引用的是A版本,另一个引用的是B版本,就会出问题,要么把A给exclusion掉,只用B版本,要不想其它办法:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>my.groud.id</groupId>
<artifactId>sparkuitest</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>sparkuitest</name>
<url>http://maven.apache.org</url>
<repositories>
<repository>
<id>central</id>
<url>http://maven.aliyun.com/nexus/content/groups/public/</url>
<!--<url>https://mvnrepository.com/artifact</url>-->
<snapshots>
<enabled>true</enabled>
</snapshots>