[Flug] questione con bash, variabili d'ambiente e spark

Leonardo Maccari mail@leonardo.ma
Mer 22 Ago 2018 13:04:22 CEST


Ciao fluggers,

c'e' una cosa che mi rompe le scatole da ieri e non riesco a capire,
sono sicuro che qualcuno di voi mi aiuta.

Sto cominciando ad usare python spark, che quando viene eseguito cerca
la versione corretta di python nella variabile PYSPARK_PYTHON (non e'
tanto importante pyspark, e' solo il casus belli).

Di default sul mio sistema uso python2 perche' ho ancora troppa roba non
convertita, ma per le cose nuove uso python3.

allora scrivo in .bashrc:

PYSPARK_PYTHON=python3

se apro una shell:

<<<
[leonardo@vonnegut ~]$ echo $PYSPARK_PYTHON
python3
>>>

OK.

Se lancio pyspark non funziona. Il problema [1] e' che non riesce a
trovare la sua "spark home", perche' ha eseguito python2. In altre
parole, ha ignorato la variabile d'ambiente.
Allora lancio:

<<<
[leonardo@vonnegut ~]$ PYSPARK_PYTHON=python3 pyspark
Python 3.6.6 (default, Jul 19 2018, 14:25:17)
[GCC 8.1.1 20180712 (Red Hat 8.1.1-5)] on linux
Type "help", "copyright", "credits" or "license" for more information.
2018-08-22 12:50:48 WARN  NativeCodeLoader:62 - Unable to load
native-hadoop library for your platform... using builtin-java classes
where applicable
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use
setLogLevel(newLevel).
Welcome to
      ____              __
     / __/__  ___ _____/ /__
    _\ \/ _ \/ _ `/ __/  '_/
   /__ / .__/\_,_/_/ /_/\_\   version 2.3.1
      /_/

Using Python version 3.6.6 (default, Jul 19 2018 14:25:17)
SparkSession available as 'spark'.
>>>

E funziona. Ovviamente se rilancio pyspark non funziona perche' la
variabile smette di essere settata alla fine del comando precedente.

Se faccio:

<<<
[leonardo@vonnegut ~]$ export PYSPARK_PYTHON=python3
[leonardo@vonnegut ~]$ pyspark
>>>

funziona, e poi continua a funzionare. Allora apro una shell nuova e faccio:

<<<
[leonardo@vonnegut ~]$ echo 'PYSPARK_PYTHON=python3' > pp
[leonardo@vonnegut ~]$ source pp
[leonardo@vonnegut ~]$ echo $PYSPARK_PYTHON
python3
[leonardo@vonnegut ~]$ pyspark
Could not find valid SPARK_HOME while searching ['/home',
'/home/leonardo/.local/bin']
/home/leonardo/.local/bin/pyspark: line 24: /bin/load-spark-env.sh: No
such file or directory
/home/leonardo/.local/bin/pyspark: line 77: /bin/spark-submit: No such
file or directory
[leonardo@vonnegut ~]$
>>>

E qui mi perdo. Perche' se setto la variabile su riga di comando e/o con
export, pyspark la trova, e se leggo la definizione da un file no?
E soprattutto, visto che la variabile e' comunque sempre settata (sta in
.bashrc), come fa pypark ad accorgersi che la variabile e' stata settata
in un modo o in un altro ed ignorarla in un caso?

ciao,
leonardo.

[1]

[leonardo@vonnegut ~]$ pyspark
Could not find valid SPARK_HOME while searching ['/home',
'/home/leonardo/.local/bin']
/home/leonardo/.local/bin/pyspark: line 24: /bin/load-spark-env.sh: No
such file or directory
/home/leonardo/.local/bin/pyspark: line 77: /bin/spark-submit: No such
file or directory






Maggiori informazioni sulla lista flug