在 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 Spark优化

Spark-shell批量命令执行脚本

与服务器同时运行循环 bash 脚本?

从 apache 正在运行的 c++ 代码调用 bash 脚本的权限问题

最常见 IP 地址 bash 脚本的 Apache 访问日志

在 Spark 中执行聚合函数时出错:ArrayType 无法转换为 org.apache.spark.sql.types.StructType