Une note pour exécuter pyspark en utilisant conda dans un environnement local. Installez et exécutez pyspark comme n'importe quelle autre bibliothèque Python populaire.
Objectif principal à assumer:
――Je souhaite créer un environnement qui fonctionne en quelques étapes, en laissant de côté les paramètres détaillés.
―― Ce serait bien si vous pouviez déplacer l'exemple de code d'articles en ligne et de livres de référence, et coder et développer des fonctions à l'aide de données de test à petite échelle pour le moment.
-Télécharger depuis Site officiel ou Mirror et PATH Il est difficile d'installer Java via ʻet
PYTHONPATH`, et ainsi de suite.
Je pense à la situation.
Entrez dans l'environnement virtuel conda cible et
--Lors de l'utilisation d'Apache Spark 3.0
conda install -c conda-forge pyspark=3.0 openjdk=8
--Lors de l'utilisation d'Apache Spark 2.4
#Remarque: Python3.8 n'est pas pris en charge, donc Python 3.7.Utilisez un environnement tel que x
conda install -c conda-forge pyspark=2.4 openjdk=8
Ensuite, non seulement la bibliothèque pyspark mais aussi Apache Spark lui-même seront installés dans l'environnement virtuel. (À propos, pandas et pyarrow, qui gère la liaison de données entre les pandas et Spark, sont également inclus.)
** À ce stade, vous devriez pouvoir utiliser pyspark
pour le moment. ** **
En passant, si vous insérez openjdk avec conda comme dans l'exemple ci-dessus, lorsque vous entrez dans l'environnement virtuel avec conda activate
, JAVA_HOME
sera automatiquement défini pour correspondre à celui entré avec conda. (Si vous entrez à partir du canal conda-forge, la version sera 1.8.0_192 (Azul Systems, Inc.) à partir du 14/08/2020.)
conda activate <nom de l'environnement virtuel>
puis sur la CLI
shell (environnement conda)
$ pyspark
Python 3.8.5 (default, Aug 5 2020, 08:36:46)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
20/08/14 22:00:15 WARN Utils: Your hostname, <***> resolves to a loopback address: 127.0.1.1; using 192.168.3.17 instead (on interface wlp3s0)
20/08/14 22:00:15 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
20/08/14 22:00:15 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/__ / .__/\_,_/_/ /_/\_\ version 3.0.0
/_/
Using Python version 3.8.5 (default, Aug 5 2020 08:36:46)
SparkSession available as 'spark'.
>>>
shell (environnement conda)
$ pyspark
Python 3.7.7 (default, May 7 2020, 21:25:33)
[GCC 7.3.0] :: Anaconda, Inc. on linux
Type "help", "copyright", "credits" or "license" for more information.
20/08/14 22:16:09 WARN Utils: Your hostname, <***> resolves to a loopback address: 127.0.1.1; using 192.168.3.17 instead (on interface wlp3s0)
20/08/14 22:16:09 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
20/08/14 22:16:09 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/__ / .__/\_,_/_/ /_/\_\ version 2.4.6
/_/
Using Python version 3.7.7 (default, May 7 2020 21:25:33)
SparkSession available as 'spark'.
>>>
Vous pouvez vérifier que pyspark
peut être utilisé pour chacun comme suit.
conda install
, vous pouvez installer et exécuter pyspark de la même manière que les autres bibliothèques Python ordinaires.De plus, Java 11 est également pris en charge à partir de Spark 3, mais lorsque je l'ai essayé facilement, j'ai eu une erreur liée à la mémoire et je n'ai pas pu le déplacer de manière satisfaisante. .. .. Même si vous regardez ici etc., il semble que des paramètres supplémentaires soient nécessaires lors de l'utilisation de Java 11 (cela semble être différent de l'erreur ci-dessus) Comme le titre l'indique, si vous voulez l'exécuter avec "** Facile pour le moment **", je pense qu'il est sûr d'utiliser Spark 3 avec la version 8 de Java. (De plus, cela ne fonctionne que s'il s'agit de Java 8 de la série Spark 2.)
La fonction décente fonctionne comme ci-dessus, mais par défaut, une erreur autour des autorisations se produit lors de l'utilisation de la table de base de données de spark.sql
.
[Ici](https://qiita.com/tomotagwork/items/1431f692387242f4a636#apache-spark%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83% 88% E3% 83% BC% E3% 83% AB), etc.
--Téléchargez le hadoop 2.7 winutils.exe
(par exemple ici ou [ici ](Disponible depuis le référentiel à https://github.com/cdarlint/winutils)
--Placez PATH
--Définissez l'emplacement de téléchargement ci-dessus sur la variable d'environnement HADOOP_HOME
Besoin d'être fait en plus.
À ce stade, vous devriez pouvoir exécuter pyspark facilement (** avec les paramètres par défaut **), mais vous devez parfois définir ou ajuster la configuration.
Si vous le personnalisez sérieusement, il ira au-delà de la gamme "facile" du titre, mais je ne le compléterai qu'au minimum. (Je vais omettre les histoires courantes qui ne sont pas uniques à conda, telles que la définition de variables d'environnement générales.)
SPARK_HOME
J'ai écrit que la variable d'environnement JAVA_HOME
(nécessaire pour exécuter Spark) est définie du côté conda sans autorisation, mais la variable d'environnement SPARK_HOME
, qui est souvent définie lors de l'utilisation d'Apache Spark, n'est pas réellement définie. (Cela fonctionne relativement bien même s'il n'est pas réglé, mais parfois c'est un problème)
Vous pouvez spécifier l'emplacement d'installation dans l'environnement virtuel, mais l'emplacement est un peu difficile à comprendre. Je pense qu'il y a plusieurs façons de le faire, mais en tant que méthode de recherche personnelle,
spark-shell
, qui est le shell Spark de scala
(il devrait être dans votre PATH), alors exécutez spark-shell
sur la CLIsc.getConf.get (" spark.home ")
et appuyez sur Entrée pour obtenir la chaîne qui apparaît et définissez-la dans la variable d'environnement SPARK_HOME
Par exemple, cela ressemble à ceci:
shell
$ spark-shell
20/08/16 12:32:18 WARN Utils: Your hostname, <***> resolves to a loopback address: 127.0.1.1; using 192.168.3.17 instead (on interface wlp3s0)
20/08/16 12:32:18 WARN Utils: Set SPARK_LOCAL_IP if you need to bind to another address
20/08/16 12:32:19 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
Spark context Web UI available at http://192.168.3.17:4040
Spark context available as 'sc' (master = local[*], app id = local-1597548749526).
Spark session available as 'spark'.
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/___/ .__/\_,_/_/ /_/\_\ version 3.0.0
/_/
Using Scala version 2.12.10 (OpenJDK 64-Bit Server VM, Java 1.8.0_192)
Type in expressions to have them evaluated.
Type :help for more information.
scala> sc.getConf.get("spark.home")
res0: String = <Environnement virtuel PATH>/lib/python3.8/site-packages/pyspark
# ↑ `String = `Le chemin absolu de l'emplacement d'installation de Spark est affiché dans la partie de
# `Ctrl-C`Quittez avec et définissez les variables d'environnement comme suit
$ export SPARK_HOME=<Environnement virtuel PATH>/lib/python3.8/site-packages/pyspark
Ou
spark-shell
de la même manièrespark.home
sur l'onglet Environnement et définissez-le dans la variable d'environnement SPARK_HOME
Etc. (Cette méthode est basée sur here.)
Par exemple, SPARK_HOME = / chemin / vers / miniconda3-latest / envs / <nom de l'environnement virtuel> / lib / python3.7 / site-packages / pyspark
.
En bref, le spark-shell de scala définit automatiquement le spark.home
approprié uniquement dans la session Spark, mais pour une raison quelconque, pyspark ne le fait pas, donc c'est comme vérifier avec spark-shell.
Le répertoire conf
existe dans Spark téléchargé depuis le répertoire officiel, etc., mais il semble que le répertoire conf
n'existe pas dans celui automatiquement installé par conda. .. ..
Cependant, il semble que si vous créez un répertoire conf
à l'endroit approprié et mettez le fichier de configuration, il sera lu. (Vérifié avec spark-defaults.conf
)
L'emplacement du fichier de configuration sera sous $ SPARK_HOME / conf /
en utilisant le chemin de SPARK_HOME
que vous avez vérifié précédemment.
Donc, par exemple
$SPARK_HOME/conf/spark-defaults.conf
Vous pouvez définir la configuration en créant et en remplissant des fichiers.
SPARK_HOME
n'est pas requise pour la lecture ci-dessus car elle a été lue même si SPARK_HOME
n'était pas défini.Je n'ai pas essayé d'autres fichiers de configuration (par exemple conf / spark-env.sh
), mais je pense que cela fonctionnera si vous créez et remplissez de la même manière. (Je suis désolé si c'est différent.)
Personnellement, je ne l'aime pas beaucoup car la modification des packages individuels que j'ai mis avec conda rend les paramètres moins portables et moins sales (l'élément "facile" du titre s'estompe). .. (C'est une histoire que vous pouvez faire si vous en avez besoin.)
Cependant, même ainsi, je pense que le mérite de pouvoir conserver les paramètres indépendamment pour chaque environnement virtuel demeure.
J'ai confirmé que pyspark peut être facilement installé et géré avec conda, et qu'il est possible de personnaliser le fichier de paramètres si vous en avez envie.
Recommended Posts