[Python, Scala] Machen Sie ein Tutorial für Apache Spark

Überblick

Umgebung

export SPARK_HOME='/usr/local/bin/spark-2.2.0-bin-hadoop2.7'

Wenn Sie bei der Installation "without-hadoop" auswählen, müssen Sie hadoop einfügen und HADOOP_HOME festlegen. Bei Verwendung von PySpark

pip pyspark

Ich habe es in etwas gesteckt. Wenn sich die Version von spark unterscheidet, funktioniert sie möglicherweise nicht richtig. Wenn Sie also die Version angeben möchten

pip pyspark-2.2.1

Geben Sie dies an, indem Sie so etwas tun.

Versuchen Sie, mit Scala zu laufen

Die Verzeichnisstruktur sieht so aus. Der Inhalt wird unten erklärt.

$ tree
.
├── SimpleApp.scala
├── build.sbt
├── input.txt
└── run.sh

SimpleApp.scala entspricht fast dem Tutorial. Nur die Eingabe wurde ein wenig geändert. Lesen Sie die Textdatei und zählen Sie, wie viele "a" und "p" enthalten sind.

SimpleApp.scala


/* SimpleApp.scala */
import org.apache.spark.sql.SparkSession

object SimpleApp {
  def main(args: Array[String]) {
    val logFile = "input.txt" // Should be some file on your system
    val spark = SparkSession.builder.appName("Simple Application").getOrCreate()
    val logData = spark.read.textFile(logFile).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numPs = logData.filter(line => line.contains("p")).count()
    println(s"Lines with a: $numAs, Lines with p: $numPs")
    spark.stop()
  }
}

Entsprechende Sätze in input.txt

this is a pen
this is an apple
apple pen
pen pen
sbt package

Generiert eine JAR-Datei unter dem Ziel basierend auf dem Inhalt von build.sbt. (Ziel wird zu diesem Zeitpunkt auch willkürlich erstellt) Beispiel build.sbt

build.sbt


name := "simple"

version := "1.0"

scalaVersion := "2.11.12"

libraryDependencies += "org.apache.spark" %% "spark-sql" % "2.0.0"

In diesem Fall lautet die generierte JAR-Datei "target / scala-2.11 / simple_2.11-1.0.jar".

run.sh ist ein Skript zur Ausführung.

run.sh


spark-submit \
 --class SimpleApp \
 --master local[4] \
 --conf spark.driver.host=localhost \
 target/scala-2.11/simple_2.11-1.0.jar 

Wenn ich "sh run.sh" starte, sind die Ergebnisse gestaffelt.

Lines with a: 3, Lines with p: 4

Es ist in Ordnung, wenn enthalten ist. ** Von den Eingängen enthalten 3 Zeilen a und 4 Zeilen p **. Der Teil spark.driver.host = localhost war nicht im Tutorial enthalten, aber wenn Sie dies nicht schreiben, wird es Ihre Umgebung sein

Error


Exception in thread "main" java.lang.AssertionError: assertion failed: Expected hostname

Kam raus, also habe ich es hinzugefügt.

Versuchen Sie, mit Python zu laufen

Für Python ist es etwas einfacher. Die Dateistruktur ist wie folgt

$ tree
.
├── SimpleApp.py
├── input.txt
└── run.sh

SimpleApp.py


from pyspark.sql import SparkSession

logFile = "input.txt"  # Should be some file on your system
spark = SparkSession.builder.appName("SimpleApp").getOrCreate()
logData = spark.read.text(logFile).cache()
numAs = logData.filter(logData.value.contains('a')).count()
numPs = logData.filter(logData.value.contains('p')).count()

print("Lines with a: %i, lines with p: %i" % (numAs, numPs))

spark.stop()

run.sh


spark-submit \
  --master local[4] \
  --conf spark.driver.host=localhost \
  SimpleApp.py

input.txt ist das gleiche. Wenn Pypark in pip enthalten ist, müssen Sie das Skript nicht ausführen

python SimpleApp.py

Es scheint, dass es nur von selbst ausgeführt werden kann.

einfache Erklärung

Dieses Mal starte ich Spark mit Spark Session. Sie können dasselbe mit SparkContext tun. Wenn Sie den Unterschied zwischen Spark-Kontext und Spark-Sitzung nicht verstehen, scheint in Spark-Sitzung Spark-Kontext enthalten zu sein, der nach Spark-Kontext angezeigt wird.

spark = SparkSession.builder.appName("SimpleApp").getOrCreate()

Erstellen Sie eine Spark-Instanz, indem Sie appName mit angeben.

logData = spark.read.text(logFile).cache()

Lesen Sie die Datei mit. cache () scheint eine Einstellung zu sein, die im Speicher verbleibt. (Es hat ohne diesen Code funktioniert) Dieses Mal lesen wir eine Textdatei, aber wir können auch strukturierte Daten wie CSV-Dateien und SQL-Tabellen lesen.

Die gelesenen Daten werden parallelisiert und mit "rdd" berechnet. Verschiedene Funktionen wie Map und Fileter werden in rdd vorbereitet.

Filter ist eine Methode zum wörtlichen Filtern. Dieses Mal lese ich die Datei Zeile für Zeile und benutze count (), um zu zählen, wie viele eine bestimmte Zeichenfolge enthalten.

numAs = logData.filter(logData.value.contains('a')).count()

SparkSession scheint als http-Server ausgeführt zu werden. Beenden Sie es also mit stop () am Ende.

spark.stop()

Zusammenfassung

Recommended Posts

[Python, Scala] Machen Sie ein Tutorial für Apache Spark
[Python] Erstellen einer virtuellen Python-Umgebung für das Pyramiden-Tutorial (Zusammenfassung)
Benötigen Sie Python re.compile?
Führen Sie eine nicht rekursive Euler-Tour in Python durch
Erstellen wir eine virtuelle Umgebung für Python
Python-Tutorial
[Mac] Erstellen einer virtuellen Umgebung für Python
Qt für Python App Desktop App
Holen Sie sich ein Zeichen für Conoha mit Python
Ein Tool zur einfachen Eingabe von Python-Code
Erstellen einer Python-Entwicklungsumgebung für die KI-Entwicklung
Ein Lehrbuch für Anfänger von Python-Anfängern
Ein Memo, das ein Tutorial zum Ausführen von Python auf Heroku erstellt hat
Ich habe eine Python-Wörterbuchdatei für Neocomplete erstellt
Erstellt einen Python-Wrapper für die Qiita-API
Holen Sie sich ein Ticket für einen Themenpark mit Python
Erstellen Sie mit Minette für Python einen LINE BOT
Vorgehensweise zum Erstellen eines mit Python erstellten LineBot
Python: Bereiten Sie einen Serializer für die Klasseninstanz vor:
Boost.NumPy Tutorial zum Erweitern von Python in C ++ (Übung)
Ein Memorandum zum Berühren von Python Flask mit Heroku
Befehle zum Erstellen einer Python3-Umgebung mit virtualenv
Verfahren zum Erstellen einer Python-Isolationsumgebung (venv-Umgebung)
Hinweise zum Erstellen einer Python-Umgebung durch Anfänger
Lassen Sie uns mit SWIG ein Modul für Python erstellen
2016-10-30 sonst für Python3> für:
Ich benutze Python, aber ich kenne die Klasse nicht gut, deshalb werde ich ein Tutorial geben
Python [für mich]
Überlegen Sie, wann Sie mit Python3 und Scala3 in 10 Jahren gute Arbeit leisten können.
Python Django Tutorial (5)
Python Django Tutorial (2)
Zusammenfassung des Python-Tutorials
Python Django Tutorial (8)
Python Django Tutorial (6)
Python Django Tutorial (7)
Python Django Tutorial (1)
Python Django Tutorial Tutorial
Python Django Tutorial (3)
Python Django Tutorial (4)
Erstellen einer Python-Umgebung mit pyenv, pyenv-virtualenv, Anaconda (Miniconda)
Schreiben Sie über das Erstellen einer Python-Umgebung zum Schreiben von Qiita Qiita
Erstellen einer R- und Python Docker-Arbeitsumgebung
Führen Sie es vorerst mit CentOS7 + Apache2.4 + Python3.6 aus
[Python] 2 Erstellen Sie eine Risiko-Rendite-Karte für Ihr Asset-Portfolio
Erstellen Sie die Python-Erweiterung E-Cell 4 unter Windows 7 (64 Bit).
Erstellen Sie mit pyenv-virtualenv eine Python-Umgebung für jedes Verzeichnis
Versuchen Sie, in Python nach einem Profil mit einer Million Zeichen zu suchen
Ich habe eine VM erstellt, auf der OpenCV für Python ausgeführt wird
[Einführung in Python] Hochgeschwindigkeits-Einführung in Python für vielbeschäftigte C ++ - Programmierer
[Zum Spielen] Versuche Yuma zu einem LINE Bot zu machen (Python)
Vorgehensweise zum Erstellen einer CDK-Umgebung unter Windows (Python)
Erstellen Sie in Docker eine Ebene für AWS Lambda Python
[Python] Ich habe einen Klassifikator für Iris erstellt [Maschinelles Lernen]
Python: Ruft eine Liste der Methoden für ein Objekt ab
Ein Java-Programmierer studierte Python. (für, if, while-Anweisung)
Ich habe eine Python-Bibliothek erstellt, die einen rollierenden Rang hat
Python-Umgebungskonstruktion für Programmieranfänger (Mac OS)
Konstruktionsnotiz für eine maschinelle Lernumgebung von Python
Proxy für Python-Pip festlegen (beschrieben in pip.ini)
Haben Sie Empfehlungen für ein Kommentarbuch zur Entwicklung von GoogleAppEngine / Python?