maven学习笔记:命令行模式创建scala_spark项目并运行程序

时间:2021-04-15 15:37:22

新建项目

使用maven新建一个项目:

mvn archetype:generate

键入组ID与项目名称:
maven学习笔记:命令行模式创建scala_spark项目并运行程序
在源码文件夹下新建一个scala文件:

touch ~/projects/scalaDemo/src/main/java/daya/scalaDemo.scala

代码如下:

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object SimpleApp {
def main(args: Array[String]) {
val logFile = "/home/daya/test.txt"
val conf = new SparkConf().setAppName("Simple Application")
val sc = new SparkContext(conf)
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
}}

在项目文件夹下新建target/classses路径:

mkdir -p target/classes

使用scala编译运行

编译命令:

scalac -d target/classes -classpath target/classes:/usr/DevProgram/spark-2.2.0-bin-hadoop2.7/jars/* src/main/java/daya/scalaDemo.scala 
//注:-d表示编译输出目录,*表所有的jar包,因为不知道到底依赖哪一个确定的jar包

运行编译生成的class文件:

java -cp target/classes/:/usr/DevProgram/spark-2.2.0-bin-hadoop2.7/jars/* -Dspark.master=local  SimpleApp

(把jars下的所有jar包都加入类路径是因为不知道scala.collection.Seq在哪个jar包下,不得已为之)
报错信息如下,暂未解决:
ClassNotFoundException: scala.runtime.LambdaDeserialize
猜测可能是版本问题,(预编译版)spark目录下的scala包名为2.11.8:
maven学习笔记:命令行模式创建scala_spark项目并运行程序
而使用的scala版本为2.12.3,更改scala版本试一下。

艹他妈果然是版本问题,换2.11.8就解决了,输出信息如下,文本不含字母a或b:
maven学习笔记:命令行模式创建scala_spark项目并运行程序


使用maven编译运行

编辑项目下的pom.xml文件:

    <dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>2.11.8</version>
</dependency>
    <build>
<sourceDirectory>src/main/scala</sourceDirectory>
<testSourceDirectory>src/test/scala</testSourceDirectory>
<plugins>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>3.2.1</version>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
</plugin>
</plugins>
</build>

(注意:maven exec插件版本选择1.2.1,最新的1.5.0在执行时异常报错)
由于是scala_spark项目,注意 把路径改为scala,项目层级结构如下图所示:
maven学习笔记:命令行模式创建scala_spark项目并运行程序

maven编译:

mvn  scala:compile

maven执行:

mvn exec:java -Dexec.mainClass="SimpleApp" -Dexec.args="/home/daya/test.txt" -Dspark.master=local

输出信息:
maven学习笔记:命令行模式创建scala_spark项目并运行程序