新建项目
使用maven新建一个项目:
mvn archetype:generate
键入组ID与项目名称:
在源码文件夹下新建一个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:
而使用的scala版本为2.12.3,更改scala版本试一下。
艹他妈果然是版本问题,换2.11.8就解决了,输出信息如下,文本不含字母a或b:
使用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编译:
mvn scala:compile
maven执行:
mvn exec:java -Dexec.mainClass="SimpleApp" -Dexec.args="/home/daya/test.txt" -Dspark.master=local
输出信息: