Eseguire Apache Spark dalla shell Spark

Una shell Apache Spark interattiva fornisce un ambiente REPL (Read-Execute-Print Loop, ciclo di lettura-esecuzione-stampa) per eseguire i comandi di Spark uno alla volta e visualizzare i risultati. Questo processo è utile per lo sviluppo e il debug. Spark fornisce una shell per ognuno dei linguaggi supportati: Scala, Python e R.

Eseguire una Shell Apache Spark

  1. Usare il comando ssh per connettersi al cluster. Modificare il comando seguente sostituendo CLUSTERNAME con il nome del cluster in uso e quindi immettere il comando:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. Spark fornisce shell per Scala (spark-shell) e Python (pyspark). Nella sessione SSH immettere uno dei comandi seguenti:

    spark-shell
    
    # Optional configurations
    # spark-shell --num-executors 4 --executor-memory 4g --executor-cores 2 --driver-memory 8g --driver-cores 4
    
    pyspark
    
    # Optional configurations
    # pyspark --num-executors 4 --executor-memory 4g --executor-cores 2 --driver-memory 8g --driver-cores 4
    

    Se si intende usare una configurazione facoltativa, assicurarsi di esaminare prima di tutto l'eccezione OutOfMemoryError per Apache Spark.

  3. Alcuni comandi di esempio di base. Scegliere la lingua pertinente:

    val textFile = spark.read.textFile("/example/data/fruits.txt")
    textFile.first()
    textFile.filter(line => line.contains("apple")).show()
    
    textFile = spark.read.text("/example/data/fruits.txt")
    textFile.first()
    textFile.filter(textFile.value.contains("apple")).show()
    
  4. Eseguire una query su un file CSV. Si noti che la lingua seguente funziona per spark-shell e pyspark.

    spark.read.csv("/HdiSamples/HdiSamples/SensorSampleData/building/building.csv").show()
    
  5. Eseguire una query su un file CSV e archiviare i risultati in una variabile:

    var data = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("/HdiSamples/HdiSamples/SensorSampleData/building/building.csv")
    
    data = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("/HdiSamples/HdiSamples/SensorSampleData/building/building.csv")
    
  6. Visualizzare i risultati:

    data.show()
    data.select($"BuildingID", $"Country").show(10)
    
    data.show()
    data.select("BuildingID", "Country").show(10)
    
  7. Esci

    :q
    
    exit()
    

Istanze di SparkSession e SparkContext

Per impostazione predefinita, quando si esegue la shell Spark vengono create automaticamente le istanze di SparkSession e SparkContext.

Per accedere all'istanza di SparkSession, immettere spark. Per accedere all'istanza di SparkContext, immettere sc.

Parametri importanti della shell

Il comando Spark Shell (spark-shello pyspark) supporta molti parametri della riga di comando. Per visualizzare un elenco completo dei parametri, avviare la shell Spark con l'opzione --help. Alcuni di questi parametri possono essere applicati solo a spark-submit, che la shell spark esegue il wrapping.

switch description esempio
--master MASTER_URL Specifica l'URL master. In HDInsight questo valore è sempre yarn. --master yarn
--jars JAR_LIST Elenco delimitato da virgole di file JAR locali da includere nei percorsi di classe di driver ed executor. In HDInsight questo elenco è composto da percorsi al file system predefinito in Archiviazione di Azure o Data Lake Storage. --jars /path/to/examples.jar
--packages MAVEN_COORDS Elenco delimitato da virgole di coordinate Maven da includere nei percorsi di classe di driver ed executor. Viene eseguita la ricerca nel repository Maven locale, quindi nel repository Maven centrale e in eventuali repository remoti aggiuntivi specificati con --repositories. Il formato per le coordinate è IDgruppo:IDelemento:versione. --packages "com.microsoft.azure:azure-eventhubs:0.14.0"
--py-files LIST Solo per Python, un elenco delimitato da virgole di .zipfile , .eggo .py da inserire in PYTHONPATH. --pyfiles "samples.py"

Passaggi successivi