2014-12-10 25 views
14

Sto facendo funzionare questo codice su una macchina locale:Passare argomenti a 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)) 
    } 
} 

mi piacerebbe eseguire il programma, ma eseguirlo su file diversi - funziona attualmente solo su README.md. Come faccio a passare il percorso del file di un altro file quando è in esecuzione Spark (o qualsiasi altro argomento per questo?). Ad esempio, mi piacerebbe cambiare contains("a") in un'altra lettera.

Faccio il programma gestito da:

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

Grazie!

risposta

18

Quando si imposta il principale

def main(args: Array[String]) { 

si sta preparando il principale ad accettare qualsiasi cosa dopo la linea di .jar come argomento. Farà un array chiamato 'args' per voi fuori di loro. Quindi accedi a loro come al solito con args [n].

Potrebbe essere utile controllare gli argomenti per tipo e/o formato, di solito è se qualcuno diverso da voi potrebbe eseguire questo.

Così, invece di impostare il set

val logFile = "String here" 

si

val logFile = args(0) 

e poi passare il file come primo argomento. Controlla i documenti per la scintilla per ulteriori informazioni, ma, in pratica, inseriscilo nella riga successiva.

+0

Perfetto! Grazie. – monster

+0

suiterdev volevi dire args (0)? – user1050325

+0

No, intendevo le parentesi quadre. Questo è un indice di array in Scala. Qualcosa può essere cambiato in Scala da quando ho scritto questo, ma dal momento in cui scrivo questo modulo significa "il val nome 'logfile' dovrebbe assumere come contenuto il contenuto del primo elemento dell'array chiamato 'args', che è al numero di posizione dell'indice zero. " – suiterdev