[Python, Scala] Faites un tutoriel pour Apache Spark

Aperçu

--Faites le tutoriel Spark sur la page suivante

Environnement

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

Si vous sélectionnez without-hadoop lorsque vous l'installez, vous devez insérer hadoop et définir HADOOP_HOME. Lors de l'utilisation de PySpark

pip pyspark

Je l'ai mis dans quelque chose. Si la version est différente de Spark, cela peut ne pas fonctionner correctement, donc si vous souhaitez spécifier la version

pip pyspark-2.2.1

Précisez en faisant quelque chose comme ça.

Essayez de courir avec Scala

La structure des répertoires ressemble à ceci. Le contenu sera expliqué ci-dessous.

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

SimpleApp.scala est presque identique au tutoriel. Seule l'entrée a été légèrement modifiée. Lisez le fichier texte et comptez le nombre de "a" et "p" inclus.

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()
  }
}

Phrases appropriées dans input.txt

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

Générera un fichier jar sous cible basé sur le contenu de build.sbt. (La cible est également créée arbitrairement à ce moment) Exemple de build.sbt

build.sbt


name := "simple"

version := "1.0"

scalaVersion := "2.11.12"

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

Dans ce cas, le fichier jar généré sera target / scala-2.11 / simple_2.11-1.0.jar.

run.sh est un script pour l'exécution.

run.sh


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

Quand je lance sh run.sh, les résultats sont échelonnés,

Lines with a: 3, Lines with p: 4

S'il est inclus, c'est correct. ** Parmi les entrées, 3 lignes contiennent a et 4 lignes contiennent p **. La partie spark.driver.host = localhost n'était pas incluse dans le tutoriel, mais si vous n'écrivez pas ceci, ce sera votre environnement

Error


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

Je suis sorti, alors je l'ai ajouté.

Essayez de courir avec Python

C'est un peu plus facile pour Python. La structure des fichiers est la suivante

$ 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 est le même. Si Pypark est inclus dans pip, vous n'avez pas à exécuter le script

python SimpleApp.py

Il semble qu'il puisse être exécuté tout seul.

explication facile

Cette fois, j'exécute Spark avec Spark Session. Vous pouvez faire de même avec SparkContext. Si vous ne comprenez pas la différence entre Spark Context et Spark Session, il semble que Spark Session contient Spark Context et apparaisse après Spark Context.

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

Créez une instance Spark en spécifiant appName avec.

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

Lisez le fichier avec. cache () semble être un paramètre qui persiste en mémoire. (Cela a fonctionné sans ce code) Cette fois, nous lisons un fichier texte, mais nous pouvons également lire des données structurées telles que des fichiers csv et des tables sql.

Les données lues sont parallélisées et calculées par «rdd». Diverses fonctions telles que map et fileter sont préparées dans rdd.

--Référence: https://dev.classmethod.jp/articles/apache-spark_rdd_investigation/

filter est une méthode de filtrage littéral. Cette fois, je lis le fichier ligne par ligne et j'utilise count () pour compter combien contiennent une chaîne particulière.

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

SparkSession semble fonctionner en tant que serveur http, alors arrêtez-le avec stop () à la fin.

spark.stop()

Résumé

Recommended Posts

[Python, Scala] Faites un tutoriel pour Apache Spark
[Python] Création d'un environnement Python virtuel pour le didacticiel sur la pyramide (résumé)
Avez-vous besoin de Python re.compile?
Faites une visite Euler non récursive en Python
Créons un environnement virtuel pour Python
Tutoriel Python
[Mac] Création d'un environnement virtuel pour Python
Qt pour l'application de bureau de l'application Python
Obtenez un jeton pour conoha avec python
Un outil pour saisir facilement du code Python
Créer un environnement de développement Python pour le développement de l'IA
Un manuel pour les débutants réalisé par des débutants Python
Un mémo qui a fait un tutoriel pour exécuter python sur heroku
J'ai créé un fichier de dictionnaire python pour Neocomplete
Création d'un wrapper Python pour l'API Qiita
Obtenez un billet pour un parc à thème avec python
Créer un LINE BOT avec Minette pour Python
Procédure de création d'un LineBot réalisé avec Python
Python: préparez un sérialiseur pour l'instance de classe:
Tutoriel Boost.NumPy pour l'extension de Python en C ++ (pratique)
Un mémorandum pour toucher Python Flask avec Heroku
Commandes pour créer un environnement python3 avec virtualenv
Procédure de création d'un environnement d'isolation Python (environnement venv)
Notes sur la création d'un environnement python par les débutants
Faisons un module pour Python en utilisant SWIG
30/10/2016 else pour Python3> pour:
J'utilise python mais je ne connais pas bien la classe, donc je vais donner un tutoriel
python [pour moi]
Prise en compte du moment où vous pouvez faire du bon travail en 10 ans avec Python3 et Scala3.
Tutoriel Python Django (5)
Tutoriel Python Django (2)
Résumé du didacticiel Python
Tutoriel Python Django (8)
Tutoriel Python Django (6)
Tutoriel Python Django (7)
Tutoriel Python Django (1)
Tutoriel du didacticiel Python Django
Tutoriel Python Django (3)
Tutoriel Python Django (4)
Construire un environnement Python avec pyenv, pyenv-virtualenv, Anaconda (Miniconda)
Écrire sur la création d'un environnement Python pour l'écriture de Qiita Qiita
Création d'un environnement de travail Docker R et Python
Exécutez avec CentOS7 + Apache2.4 + Python3.6 pour le moment
[Python] 2 Créez une carte risque-rendement pour votre portefeuille d'actifs
Construire l'extension Python E-Cell 4 sur Windows 7 (64 bits)
Créez un environnement python pour chaque répertoire avec pyenv-virtualenv
Essayez de rechercher un profil d'un million de caractères en Python
J'ai créé une VM qui exécute OpenCV pour Python
[Introduction à python] Introduction rapide à Python pour les programmeurs C ++ occupés
[Pour jouer] Essayez de faire de Yuma un robot LINE (Python)
Procédure de création d'un environnement CDK sous Windows (Python)
Créer une couche pour AWS Lambda Python dans Docker
[Python] J'ai créé un classificateur pour les iris [Machine learning]
Python: obtenir une liste de méthodes pour un objet
Un programmeur Java a étudié Python. (for, if, while instruction)
J'ai créé une bibliothèque python qui fait rouler le rang
Construction d'environnement Python pour les débutants en programmation (Mac OS)
Mémo de construction d'environnement d'apprentissage automatique par Python
Définir le proxy pour Python pip (décrit dans pip.ini)
Avez-vous des recommandations pour un livre de commentaires sur le développement de GoogleAppEngine / Python?