Je suis nouveau avec Apache spark et apparemment, j'ai installé Apache-spark avec homebrew dans mon macbook:
Last login: Fri Jan 8 12:52:04 on console
user@MacBook-Pro-de-User-2:~$ pyspark
Python 2.7.10 (default, Jul 13 2015, 12:05:58)
[GCC 4.2.1 Compatible Apple LLVM 6.1.0 (clang-602.0.53)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Using Spark's default log4j profile: org/Apache/spark/log4j-defaults.properties
16/01/08 14:46:44 INFO SparkContext: Running Spark version 1.5.1
16/01/08 14:46:46 WARN NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-Java classes where applicable
16/01/08 14:46:47 INFO SecurityManager: Changing view acls to: user
16/01/08 14:46:47 INFO SecurityManager: Changing modify acls to: user
16/01/08 14:46:47 INFO SecurityManager: SecurityManager: authentication disabled; ui acls disabled; users with view permissions: Set(user); users with modify permissions: Set(user)
16/01/08 14:46:50 INFO Slf4jLogger: Slf4jLogger started
16/01/08 14:46:50 INFO Remoting: Starting remoting
16/01/08 14:46:51 INFO Remoting: Remoting started; listening on addresses :[akka.tcp://[email protected]:50199]
16/01/08 14:46:51 INFO Utils: Successfully started service 'sparkDriver' on port 50199.
16/01/08 14:46:51 INFO SparkEnv: Registering MapOutputTracker
16/01/08 14:46:51 INFO SparkEnv: Registering BlockManagerMaster
16/01/08 14:46:51 INFO DiskBlockManager: Created local directory at /private/var/folders/5x/k7n54drn1csc7w0j7vchjnmc0000gn/T/blockmgr-769e6f91-f0e7-49f9-b45d-1b6382637c95
16/01/08 14:46:51 INFO MemoryStore: MemoryStore started with capacity 530.0 MB
16/01/08 14:46:52 INFO HttpFileServer: HTTP File server directory is /private/var/folders/5x/k7n54drn1csc7w0j7vchjnmc0000gn/T/spark-8e4749ea-9ae7-4137-a0e1-52e410a8e4c5/httpd-1adcd424-c8e9-4e54-a45a-a735ade00393
16/01/08 14:46:52 INFO HttpServer: Starting HTTP Server
16/01/08 14:46:52 INFO Utils: Successfully started service 'HTTP file server' on port 50200.
16/01/08 14:46:52 INFO SparkEnv: Registering OutputCommitCoordinator
16/01/08 14:46:52 INFO Utils: Successfully started service 'SparkUI' on port 4040.
16/01/08 14:46:52 INFO SparkUI: Started SparkUI at http://192.168.1.64:4040
16/01/08 14:46:53 WARN MetricsSystem: Using default name DAGScheduler for source because spark.app.id is not set.
16/01/08 14:46:53 INFO Executor: Starting executor ID driver on Host localhost
16/01/08 14:46:53 INFO Utils: Successfully started service 'org.Apache.spark.network.netty.NettyBlockTransferService' on port 50201.
16/01/08 14:46:53 INFO NettyBlockTransferService: Server created on 50201
16/01/08 14:46:53 INFO BlockManagerMaster: Trying to register BlockManager
16/01/08 14:46:53 INFO BlockManagerMasterEndpoint: Registering block manager localhost:50201 with 530.0 MB RAM, BlockManagerId(driver, localhost, 50201)
16/01/08 14:46:53 INFO BlockManagerMaster: Registered BlockManager
Welcome to
____ __
/ __/__ ___ _____/ /__
_\ \/ _ \/ _ `/ __/ '_/
/__ / .__/\_,_/_/ /_/\_\ version 1.5.1
/_/
Using Python version 2.7.10 (default, Jul 13 2015 12:05:58)
SparkContext available as sc, HiveContext available as sqlContext.
>>>
J'aimerais commencer à jouer pour en savoir plus sur MLlib. Cependant, j'utilise Pycharm pour écrire des scripts en python. Le problème est le suivant: lorsque je vais à Pycharm et que j'essaie d'appeler pyspark, Pycharm ne peut pas trouver le module. J'ai essayé d'ajouter le chemin à Pycharm comme suit:
Puis d'un blog j'ai essayé ceci:
import os
import sys
# Path for spark source folder
os.environ['SPARK_HOME']="/Users/user/Apps/spark-1.5.2-bin-hadoop2.4"
# Append pyspark to Python Path
sys.path.append("/Users/user/Apps/spark-1.5.2-bin-hadoop2.4/python/pyspark")
try:
from pyspark import SparkContext
from pyspark import SparkConf
print ("Successfully imported Spark Modules")
except ImportError as e:
print ("Can not import Spark Modules", e)
sys.exit(1)
Et ne peut toujours pas commencer à utiliser PySpark avec Pycharm, aucune idée de la façon de "lier" PyCharm avec Apache-pyspark ?.
Mise à jour:
Ensuite, je recherche Apache-spark et le chemin python afin de définir les variables d'environnement de Pycharm:
Apache-spark path:
user@MacBook-Pro-User-2:~$ brew info Apache-spark
Apache-spark: stable 1.6.0, HEAD
Engine for large-scale data processing
https://spark.Apache.org/
/usr/local/Cellar/Apache-spark/1.5.1 (649 files, 302.9M) *
Poured from bottle
From: https://github.com/Homebrew/homebrew/blob/master/Library/Formula/Apache-spark.rb
chemin python:
user@MacBook-Pro-User-2:~$ brew info python
python: stable 2.7.11 (bottled), HEAD
Interpreted, interactive, object-oriented programming language
https://www.python.org
/usr/local/Cellar/python/2.7.10_2 (4,965 files, 66.9M) *
Ensuite, avec les informations ci-dessus, j'ai essayé de définir les variables d'environnement comme suit:
Avez-vous une idée de la manière de lier correctement Pycharm à pyspark?
Ensuite, lorsque je lance un script python avec la configuration ci-dessus, j'ai cette exception:
/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/bin/python2.7 /Users/user/PycharmProjects/spark_examples/test_1.py
Traceback (most recent call last):
File "/Users/user/PycharmProjects/spark_examples/test_1.py", line 1, in <module>
from pyspark import SparkContext
ImportError: No module named pyspark
UPDATE: Ensuite, j'ai essayé cette configuration proposée par @ zero323
Configuration 1:
/usr/local/Cellar/Apache-spark/1.5.1/
en dehors:
user@MacBook-Pro-de-User-2:/usr/local/Cellar/Apache-spark/1.5.1$ ls
CHANGES.txt NOTICE libexec/
INSTALL_RECEIPT.json README.md
LICENSE bin/
Configuration 2:
/usr/local/Cellar/Apache-spark/1.5.1/libexec
en dehors:
user@MacBook-Pro-de-User-2:/usr/local/Cellar/Apache-spark/1.5.1/libexec$ ls
R/ bin/ data/ examples/ python/
RELEASE conf/ ec2/ lib/ sbin/
Avec la fusion de SPARK-1267 , vous devriez pouvoir simplifier le processus en installant pip
en installant Spark dans l'environnement que vous utilisez pour le développement de PyCharm.
Cliquez sur le bouton d'installation et recherchez PySpark
Cliquez sur le bouton installer le paquet.
Créer une configuration d'exécution :
Editez le champ Variables d’environnement afin qu’il contienne au moins:
SPARK_HOME
- il devrait pointer vers le répertoire avec Spark installation. Il doit contenir des répertoires tels que bin
(avec spark-submit
, spark-Shell
, etc.) et conf
(avec spark-defaults.conf
, spark-env.sh
, etc. )PYTHONPATH
- il devrait contenir $SPARK_HOME/python
et éventuellement $SPARK_HOME/python/lib/py4j-some-version.src.Zip
s'il n'est pas disponible autrement. some-version
doit correspondre à la version de Py4J utilisée par une installation donnée de Spark (0.8.2.1 - 1.5, 0.9 - 1.6, 0.10.3 - 2.0, 0.10.4 - 2.1, 0.10.4 - 2.2, 0,10,6 - 2,3)
Appliquer les paramètres
Ajoutez la bibliothèque PySpark au chemin de l’interpréteur (obligatoire pour l’achèvement du code) :
$SPARK_HOME/python
(Py4J si nécessaire)Utilisez la configuration nouvellement créée pour exécuter votre script.
Voici comment j'ai résolu ceci sur mac osx.
brew install Apache-spark
Ajoutez ceci à ~/.bash_profile
export SPARK_VERSION=`ls /usr/local/Cellar/Apache-spark/ | sort | tail -1`
export SPARK_HOME="/usr/local/Cellar/Apache-spark/$SPARK_VERSION/libexec"
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.9-src.Zip:$PYTHONPATH
Ajoutez pyspark et py4j à la racine du contenu (utilisez la version correcte de Spark):
/usr/local/Cellar/Apache-spark/1.6.1/libexec/python/lib/py4j-0.9-src.Zip
/usr/local/Cellar/Apache-spark/1.6.1/libexec/python/lib/pyspark.Zip
Voici la configuration qui fonctionne pour moi (Win7 64 bits, PyCharm2017.3CE)
Configurez Intellisense:
Cliquez sur Fichier -> Paramètres -> Projet: -> Interprète de projet
Cliquez sur l'icône représentant un engrenage à droite du menu déroulant Interprète de projet.
Cliquez sur Plus ... dans le menu contextuel
Choisissez l'interprète, puis cliquez sur l'icône "Afficher les chemins" (en bas à droite)
Cliquez sur l'icône + deux ajoutez les chemins suivants:
\ python\lib\py4j-0.9-src.Zip
\ bin\python\lib\pyspark.Zip
Cliquez sur OK, OK, OK
Allez-y et testez vos nouvelles capacités intellisense.
Configurez pyspark dans pycharm (windows)
File menu - settings - project interpreter - (gearshape) - more - (treebelowfunnel) - (+) - [add python folder form spark installation and then py4j-*.Zip] - click ok
Assurez-vous que SPARK_HOME est défini dans l’environnement Windows, pycharm partira de là. Confirmer :
Run menu - edit configurations - environment variables - [...] - show
Définissez éventuellement SPARK_CONF_DIR dans les variables d'environnement.
J'ai utilisé la page suivante comme référence et j'ai pu importer pyspark/Spark 1.6.1 (installé via homebrew) dans PyCharm 5.
http://renien.com/blog/accessing-pyspark-pycharm/
import os
import sys
# Path for spark source folder
os.environ['SPARK_HOME']="/usr/local/Cellar/Apache-spark/1.6.1"
# Append pyspark to Python Path
sys.path.append("/usr/local/Cellar/Apache-spark/1.6.1/libexec/python")
try:
from pyspark import SparkContext
from pyspark import SparkConf
print ("Successfully imported Spark Modules")
except ImportError as e:
print ("Can not import Spark Modules", e)
sys.exit(1)
Avec ce qui précède, pyspark se charge, mais je reçois une erreur de passerelle lorsque je tente de créer un SparkContext. Il y a un problème avec Spark de homebrew. Je viens donc de saisir Spark du site Web Spark (téléchargez le pré-construit pour Hadoop 2.6 et versions ultérieures) et pointez sur les répertoires spark et py4j situés sous celui-ci. Voici le code dans pycharm qui fonctionne!
import os
import sys
# Path for spark source folder
os.environ['SPARK_HOME']="/Users/myUser/Downloads/spark-1.6.1-bin-hadoop2.6"
# Need to Explicitly point to python3 if you are using Python 3.x
os.environ['PYSPARK_PYTHON']="/usr/local/Cellar/python3/3.5.1/bin/python3"
#You might need to enter your local IP
#os.environ['SPARK_LOCAL_IP']="192.168.2.138"
#Path for pyspark and py4j
sys.path.append("/Users/myUser/Downloads/spark-1.6.1-bin-hadoop2.6/python")
sys.path.append("/Users/myUser/Downloads/spark-1.6.1-bin-hadoop2.6/python/lib/py4j-0.9-src.Zip")
try:
from pyspark import SparkContext
from pyspark import SparkConf
print ("Successfully imported Spark Modules")
except ImportError as e:
print ("Can not import Spark Modules", e)
sys.exit(1)
sc = SparkContext('local')
words = sc.parallelize(["scala","Java","hadoop","spark","akka"])
print(words.count())
Ces instructions m'ont beaucoup aidé, ce qui m'a aidé à résoudre PyDev et à le faire fonctionner. PyCharm - https://enahwe.wordpress.com/2015/25/how-to-configure-Eclipse -pour-développer-avec-python-et-spark-on-hadoop /
Je suis sûr que quelqu'un a passé quelques heures à se cogner la tête contre son moniteur pour que cela fonctionne, alors j'espère que cela contribuera à préserver leur santé mentale!
J'utilise conda
pour gérer mes packages Python. Donc tout ce que j'ai fait dans un terminal en dehors de PyCharm était:
conda install pyspark
ou, si vous voulez une version antérieure, disons 2.2.0, alors faites:
conda install pyspark=2.2.0
Cela entraîne automatiquement py4j. PyCharm ne se plaint plus alors de import pyspark...
et la complétion du code fonctionne également. Notez que mon projet PyCharm était déjà configuré pour utiliser l'interpréteur Python fourni avec Anaconda.
Départ cette vidéo.
Supposons que votre répertoire spark python est: /home/user/spark/python
Supposons que votre source Py4j est: /home/user/spark/python/lib/py4j-0.9-src.Zip
En gros, vous ajoutez le répertoire spark python et le répertoire py4j aux chemins de l'interpréteur. Je n'ai pas assez de réputation pour poster une capture d'écran ou je le ferais.
Dans la vidéo, l'utilisateur crée un environnement virtuel au sein de pycharm lui-même. Toutefois, vous pouvez créer un environnement virtuel en dehors de pycharm ou activer un environnement virtuel préexistant, puis démarrer pycharm avec ce dernier et ajouter ces chemins d'accès aux chemins d'interprétation de l'environnement virtuel. dans pycharm.
J'ai utilisé d'autres méthodes pour ajouter spark via les variables d'environnement bash, ce qui fonctionne très bien en dehors de pycharm, mais pour une raison quelconque, elles n'étaient pas reconnues dans pycharm, mais cette méthode fonctionnait parfaitement.
Vous devez configurer PYTHONPATH, SPARK_HOME avant de lancer IDE ou Python.
Windows, modifier les variables d'environnement, ajouté spark python et py4j dans
PYTHONPATH=%PYTHONPATH%;{py4j};{spark python}
Unix,
export PYTHONPATH=${PYTHONPATH};{py4j};{spark/python}
J'ai suivi les tutoriels en ligne et ajouté les variables env à .bashrc:
# add pyspark to python
export SPARK_HOME=/home/lolo/spark-1.6.1
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.9-src.Zip:$PYTHONPATH
Je viens alors de recevoir la valeur dans SPARK_HOME et PYTHONPATH pour pycharm:
(srz-reco)lolo@K:~$ echo $SPARK_HOME
/home/lolo/spark-1.6.1
(srz-reco)lolo@K:~$ echo $PYTHONPATH
/home/lolo/spark-1.6.1/python/lib/py4j-0.9-src.Zip:/home/lolo/spark-1.6.1/python/:/home/lolo/spark-1.6.1/python/lib/py4j-0.9-src.Zip:/home/lolo/spark-1.6.1/python/:/python/lib/py4j-0.8.2.1-src.Zip:/python/:
Ensuite, je l'ai copié dans Configurations Exécuter/Déboguer -> Variables d'environnement du script.
De la documentation :
Pour exécuter les applications Spark en Python, utilisez le script bin/spark-submit situé dans le répertoire Spark. Ce script chargera les bibliothèques Java/Scala de Spark et vous permettra de soumettre des applications à un cluster. Vous pouvez également utiliser bin/pyspark pour lancer un shell Python interactif.
Vous appelez votre script directement avec l'interpréteur CPython, ce qui, à mon avis, pose des problèmes.
Essayez de lancer votre script avec:
"${SPARK_HOME}"/bin/spark-submit test_1.py
Si cela fonctionne, vous devriez pouvoir le faire fonctionner dans PyCharm en paramétrant l'interprète du projet pour qu'il envoie-spark.