Передача аргументов в Apache Spark

Я запускаю этот код на локальной машине:

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf

object SimpleApp {
  def main(args: Array[String]) {
    val logFile = "/Users/username/Spark/README.md"
    val conf = new SparkConf().setAppName("Simple Application")
    val sc = new SparkContext(conf)
    val logData = sc.textFile(logFile, 2).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
  }
}

Я хотел бы запустить программу, но запустить ее на разных файлах - она ​​работает только на README.md. Как передать путь к файлу другого файла при запуске Spark (или любой другой аргумент?). Например, я хотел бы изменить contains("a") на другую букву.

Я запускаю программу:

$ YOUR_SPARK_HOME/bin/spark-submit \
  --class "SimpleApp" \
  --master local[4] \
  target/scala-2.10/simple-project_2.10-1.0.jar

Спасибо!

Ответы

Ответ 1

Когда вы настраиваете свой основной в

 def main(args: Array[String]) {

вы готовите свой основной, чтобы принять что-либо после строки .jar в качестве аргумента. Он сделает массив с именем "args" для вас из них. Затем вы обращаетесь к ним, как обычно, с args [n].

Возможно, было бы хорошо проверить ваши аргументы на тип и/или формат, обычно это если кто-то, кроме вас, мог бы запустить это.

Итак, вместо установки

val logFile = "String here"

установите его

val logFile = args(0)

а затем передать файл в качестве первого аргумента. Проверьте исправить-отправьте документы для получения дополнительной информации об этом, но вы просто вводите его на следующей строке в основном.