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

我可以通过spark scala程序运行shell脚本吗?,scala,hadoop,apache-spark,intellij-idea,spark-dataframe,Scala,Hadoop,Apache Spark,Intellij Idea,Spark Dataframe,我正在用intelligi编写一个spark scala程序,我的代码基本上是从oracle中获取表,并将它们作为文本文件存储在hdfs中insert_df.rdd.saveAsTextFile(“hdfs://path)。我尝试过这种方法,但没有成功val script\u sh=“///samplepath/file\u creation\u script.sh” 但是我需要对生成的文本文件进行一些转换,我为此编写了一个shell脚本。我不想分别运行spark jar文件和.sh文件 请告诉

我正在用intelligi编写一个spark scala程序,我的代码基本上是从oracle中获取表,并将它们作为文本文件存储在hdfs中
insert_df.rdd.saveAsTextFile(“hdfs://path)
。我尝试过这种方法,但没有成功
val script\u sh=“///samplepath/file\u creation\u 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)
      }
    

    你能试试df.write.text(“/hdfs/path”)