Normalmente hacemos un spark-submit con el archivo zip spark-submit --name App_Name --master yarn --deploy-mode cluster --archives /<path>/myzip.zip#pyzip /<path>/Processfile.py y accedemos a ellos en los archivos py usando dir1.dir2.dir3.module_name import module_name y la importación del módulo funciona bien.

Cuando trato de hacer lo mismo en pyspark shell, me da un error de módulo no encontrado. pyspark --py-files /<path>/myzip.zip#pyzip

¿Cómo se puede acceder a los módulos en el shell de la chispa?

-1
Joby 2 ene. 2020 a las 15:52

2 respuestas

La mejor respuesta

Finalmente pude importar los módulos en el shell Pyspark, el ZIP que estoy pasando tiene todos los módulos de dependencia instalados en un entorno virtual en Python y hechos como un ZIP.

Entonces, en tales casos, volverse virtual y luego iniciar el shell Pyspark hizo el truco.

source bin/activate
pyspark --archives <path>/filename.zip

Esto no me obligó a agregar los archivos pyp al sparkContext también.

0
Joby 6 ene. 2020 a las 06:43

Puede utilizar el contexto de chispa disponible en el shell pyspark en la variable de sesión 'chispa' Spark de la siguiente manera

spark.sparkContext.addPyFile('Path to your file')

De acuerdo con la dependencia de spark-docs .py o .zip con el código python se admite en esto.

 |  addPyFile(self, path)
 |      Add a .py or .zip dependency for all tasks to be executed on this
 |      SparkContext in the future.  The C{path} passed can be either a local
 |      file, a file in HDFS (or other Hadoop-supported filesystems), or an
 |      HTTP, HTTPS or FTP URI.
 |
 |      .. note:: A path can be added only once. Subsequent additions of the same path are ignored.

A continuación se muestra la llamada exitosa de importación y función después de usar zip

>>> sc.addPyFile('D:\pyspark_test.zip')
>>> import test
>>> test
<module 'test' from 'C:\\Users\\AppData\\Local\\Temp\\spark-f4559ba6-0661-4cea-a841-55d7550d809d\\userFiles-062f5965-e5df-4d26-b2cd-daf7613df56a\\pyspark_test.zip\\test.py'>
>>> test.print_data()
hello
>>>

Asegúrese de tener la estructura del archivo zip de la siguiente manera. Mientras crea zip seleccione todos los archivos induvidual en el módulo y luego cree un zip en lugar de seleccionar la carpeta del módulo y luego cree el archivo zip

└───pyspark_test
        test.py
        _init_.py
1
kirtan_shah 2 ene. 2020 a las 14:26