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