我可以通过 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 脚本,对我有用
- 在客户端模式下:
只是 运行 来自 spark 代码的 shell 脚本
val cmd = "home/some_script.sh"
命令!
- 在集群模式下:
我通常使用 Oozie,将 .sh 文件保存在工作流的 /lib 文件夹中,这会将脚本复制到容器中。
从代码调用
val cmd = "./some_script.sh"
命令!
对于python“.”不需要
val cmd = "python some_script.py"
命令!
- 如果使用 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)
}
我正在用 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 脚本,对我有用
- 在客户端模式下:
只是 运行 来自 spark 代码的 shell 脚本
val cmd = "home/some_script.sh"
命令!
- 在集群模式下:
我通常使用 Oozie,将 .sh 文件保存在工作流的 /lib 文件夹中,这会将脚本复制到容器中。
从代码调用
val cmd = "./some_script.sh"
命令!
对于python“.”不需要
val cmd = "python some_script.py"
命令!
- 如果使用 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)
}