在 Bash 脚本中执行 Apache Spark (Scala) 代码
Posted
技术标签:
【中文标题】在 Bash 脚本中执行 Apache Spark (Scala) 代码【英文标题】:Execute Apache Spark (Scala) code in Bash script 【发布时间】:2016-11-15 10:00:14 【问题描述】:我是 spark 和 scala 的新手。 我想从 bash 脚本中执行一些 spark 代码。我写了以下代码。
Scala 代码编写在单独的.scala
文件中,如下所示。
Scala 代码:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
object SimpleApp
def main(args: Array[String])
val conf = new SparkConf().setAppName("Simple Application")
val sc = new SparkContext(conf)
println("x="+args(0),"y="+args(1))
这是调用 Apache-spark/scala 代码的 bash 脚本。
Bash 代码
#!/usr/bin/env bash
Absize=File_size1
AdBsize=File_size2
for i in `seq 2 $ABsize`
do
for j in `seq 2 $ADsize`
do
Abi=`sed -n ""$i"p" < File_Path1`
Adj=`sed -n ""$j"p" < File_Path2`
scala SimpleApp.scala $Abi $adj
done
done
然后我收到以下错误。
错误:
error:object apache is not a member of package org
import org.apache.spark.SparkContext
^
error: object apache is not a member of package org
import org.apache.spark.SparkContext._
^
error: object apache is not a member of package org
import org.apache.spark.SparkConf
^
error: not found:type SparkConf
val conf = new SparkConf().setAppName("Simple Application") ^
error: not found:type SparkContext
如果 scala 文件是在没有任何 spark 函数的情况下编写的(即纯 scala 文件),上面的代码可以完美运行,但是当有 apache-spark 导入时会失败。
从 bash 脚本运行和执行它的好方法是什么?我必须调用 spark shell 来执行代码吗?
【问题讨论】:
尝试在类路径中提供 spark-core 依赖项,例如 scala -classpath "*.jar" YourFile.scala 我使用了以下命令 scala -classpath simple-project_2.11-1.0.jar SimpleApp.scala $Abi $adj 但仍然有同样的错误@FaigB 如果您在 $spark_home/lib/spark-core_2.10-version.jar 的类路径 jar 中本地使用 spark 或从 mvnrepository.com/artifact/org.apache.spark/spark-core_2.10 下载并放在类路径中 通常,您使用spark-submit
命令提交 Spark 作业
您有 2 个选择使用环境变量设置 spark 并使用 spark-submit -class SimpleApp simple-project_2.11-1.0.jar $Abi $adj 告诉 @puhlen 运行或列出所有必需的 ClassNotFoundException 库在类路径中
【参考方案1】:
使用环境变量设置 spark 并按照 @puhlen 告诉 spark-submit -class SimpleApp simple-project_2.11-1.0.jar $Abi $adj
的方式运行
【讨论】:
以上是关于在 Bash 脚本中执行 Apache Spark (Scala) 代码的主要内容,如果未能解决你的问题,请参考以下文章
从 apache 正在运行的 c++ 代码调用 bash 脚本的权限问题
最常见 IP 地址 bash 脚本的 Apache 访问日志
在 Spark 中执行聚合函数时出错:ArrayType 无法转换为 org.apache.spark.sql.types.StructType