我可以通过 spark-scala 程序 运行 一个 shell 脚本吗?

Can i run a shell script through the spark-scala program?

我正在用 intelligi 编写一个 spark-scala 程序,我的代码基本上是从 oracle 中获取 table 并将它们作为文本文件 insert_df.rdd.saveAsTextFile("hdfs://path") 存储在 hdfs 中。我试过这种方法,但是没有用val script_sh = "///samplepath/file_creation_script.sh".!

但是我要对生成的文本文件进行一些转换,我为此编写了一个 shell 脚本。我不想 运行 spark jar 文件和 .sh 文件分开。

如果有任何方法可以通过程序调用 shell 脚本,请告诉我。

我会说尝试只使用 spark API。

不过,如果你想从 spark (1) 和 (2) 触发 shell 脚本,对我有用

  1. 在客户端模式下:

只是 运行 来自 spark 代码的 shell 脚本

val cmd = "home/some_script.sh"

命令!

  1. 在集群模式下:

我通常使用 Oozie,将 .sh 文件保存在工作流的 /lib 文件夹中,这会将脚本复制到容器中。

从代码调用

val cmd = "./some_script.sh"

命令!

对于python“.”不需要

val cmd = "python some_script.py"

命令!

  1. 如果使用 spark-submit 使用 --files 将脚本复制到容器中。

3个没试过,有机会试试分享一下

如果您想将命令的输出保存到您需要使用的变量中:

import sys.process._
val result = "/path/to/your/script.sh".!! ("!" just execute the command)

这可以像解决方法一样工作:

import java.io.{BufferedReader, InputStreamReader}

  val p = new ProcessBuilder("/bin/bash","/path/to/your/script")
  val p2 = p.start()
  val br = new BufferedReader(new InputStreamReader(p2.getInputStream()))

  var line:String = ""
  while ({line = br.readLine();  line!= null}) {
    println(line)
  }