spark-submit 执行scala代码
Posted 数据分析纵览
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spark-submit 执行scala代码相关的知识,希望对你有一定的参考价值。
安装了spark之后,可以用spark-shell 执行scala脚本,也可以用spark-submit执行python脚本。
环境变量设置如下:
alias python=/usr/bin/python3
export SPARK_HOME=/data/softwares/bigdata/spark-2.4.4-bin-hadoop2.7
export PYSPARK_PYTHON=/usr/bin/python3
具体用法如下:
# spark-shell 执行 scala脚本
spark-shell -i <test_printArray.scala
## spark-submit 执行python脚本
spark-submit SimpleApp.py
scala是能在JVM(Java Virtual Machine)运行的一种编译型语言,spark本身就是用scala开发的。
一段顺序执行的scala代码示例如下:
case class Student(id: String, name: String, age:Int)
## 读取一个txt文件,其中包含三列,第一列ID,第二列名字,第三列年龄
val rdd = sc.textFile("stu.txt").map(_.split(",")).map(p => Student(p(0), p(1),
p(2).trim.toInt))
val students = rdd.toDF()
students.registerTempTable("tb_students")
val youngstudents = spark.sqlContext.sql("SELECT name FROM tb_students WHERE age
>=19 AND age<=22")
val array_s = youngstudents.collect()
for (i <- 0 to (array_s.length-1)){println(array_s(i))}
如果要把scala编写的代码,编译成jar文件,然后用spark-submit 提交任务,那么采用以下方法:
# 首先要安装 sbt, 普通用户用sudo
curl https://bintray.com/sbt/rpm/rpm | tee /etc/yum.repos.d/bintray-sbt-rpm.repo
yum install sbt
# 在一个项目目录中,文件如下:
.
./build.sbt
./src
./src/main
./src/main/scala
./src/main/scala/SimpleApp.scala
## 在这个目录中执行以下命令, 如果以来的jar文件没有下载过,这一步需等10-15分钟作用
sbt package
## 会产生target 文件夹,其中会有scala-2.11目录,其中会编译产生jar文件
# 最后用spark-submit 执行jar文件
spark-submit --class "SimpleApp" --master local[4] target/scala-2.11/simple-project_2.11-1.0.jar
build.sbt内容如下:
name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.4.4"
scala 代码如下:
/* SimpleApp.scala */
import org.apache.spark.sql.SparkSession
object SimpleApp {
def main(args: Array[String]) {
val logFile = "file:////home/user/scala_test1/README.md" // Should be some fi
le on your system
val spark = SparkSession.builder.appName("SimpleApp").getOrCreate()
val logData = spark.read.textFile(logFile).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println(s"Lines with a: $numAs, Lines with b: $numBs")
spark.stop()
}
}
这样结果就输出以下内容
Lines with a: 62, lines with b: 31
scala这里使用的是sbt进行编译的,版本为2.11.8
以上是关于spark-submit 执行scala代码的主要内容,如果未能解决你的问题,请参考以下文章
通过spark-submit,本地测试SparkStreaming
dse spark-submit 到特定工作池而不是“默认”