【问题标题】:Can i run a shell script through the spark-scala program?我可以通过 spark-scala 程序运行 shell 脚本吗?
【发布时间】:2017-03-09 09:08:31
【问题描述】:

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

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

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

【问题讨论】:

  • 你可以试试df.write.text("/hdfs/path")

标签: scala hadoop apache-spark intellij-idea spark-dataframe


【解决方案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)
  }

【讨论】:

    【解决方案2】:

    我会说尝试只使用 spark API。

    如果您想从 spark (1) 和 (2) 触发 shell 脚本,仍然对我有用

    1. 在客户端模式下:

    只需从 spark 代码运行 shell 脚本

    val cmd = "home/some_script.sh"

    命令!

    1. 在集群模式下:

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

    从代码调用

    val cmd = "./some_script.sh"

    命令!

    对于蟒蛇“。”不需要

    val cmd = "python some_script.py"

    命令!

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

    3 没试过,可以试试,分享一下。

    【讨论】:

      猜你喜欢
      • 2020-01-01
      • 1970-01-01
      • 2015-03-07
      • 1970-01-01
      • 2019-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-27
      相关资源
      最近更新 更多