spark-submit 执行scala代码

Posted 数据分析纵览

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了spark-submit 执行scala代码相关的知识,希望对你有一定的参考价值。

安装了spark之后,可以用spark-shell 执行scala脚本,也可以用spark-submit执行python脚本。


环境变量设置如下:

alias python=/usr/bin/python3export SPARK_HOME=/data/softwares/bigdata/spark-2.4.4-bin-hadoop2.7export 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, 普通用户用sudocurl https://bintray.com/sbt/rpm/rpm | tee /etc/yum.repos.d/bintray-sbt-rpm.repoyum 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 file 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

spark-submit之使用pyspark

pyspark执行逻辑流程

dse spark-submit 到特定工作池而不是“默认”

在 Bash 脚本中执行 Apache Spark (Scala) 代码

为啥此 python 代码在 pyspark 中有效,但在 spark-submit 中无效?