我正在intelligi中编写一个spark-scala程序,我的代码基本上是从oracle中提取表并将它们作为文本文件insert_df.rdd.saveAsTextFile("hdfs://path")
存储在hdfs中。我试过这种方式,但它不起作用val script_sh = "///samplepath/file_creation_script.sh".!
但我对我生成的文本文件进行了一些转换,我写了一个shell脚本。我不想分别运行spark jar文件和.sh
文件。
如果有任何方法我可以通过该程序调用shell脚本,请告诉我。
答案 0 :(得分:1)
如果要将命令的输出保存到变量,则需要使用:
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)
}
答案 1 :(得分:0)
我想说只尝试使用spark API。
如果你想从spark(1)和(2)为我工作
触发shell脚本只需从spark代码
运行shell脚本val cmd =“home / some_script.sh”
CMD!
我通常使用Oozie,将.sh文件保存在工作流的/ lib文件夹中,这会将脚本复制到容器中。
来自代码调用
val cmd =“./ some_script.sh”
CMD!
对于python“。”不需要
val cmd =“python some_script.py”
CMD!
没试过3,可以尝试分享。