Use Spark_CSV dentro de Jupyter y use Python
-
16-10-2019 - |
Pregunta
Mi objetivo final es usar Jupyter junto con Python para el análisis de datos utilizando Spark. El obstáculo actual que enfrento está cargando el externo spark_csv
biblioteca. Estoy usando Mac OS y Anaconda como la distribución de Python.
En particular, lo siguiente:
from pyspark import SparkContext
sc = SparkContext('local', 'pyspark')
sqlContext = SQLContext(sc)
df = sqlContext.read.format('com.databricks.spark.csv').options(header='true').load('file.csv')
df.show()
Cuando se invoca desde Jupyter rendimiento:
Py4JJavaError: An error occurred while calling o22.load.
: java.lang.ClassNotFoundException: Failed to find data source: com.databricks.spark.csv. Please find packages at http://spark-packages.org
Aquí hay más detalles:
Establecer chispa junto con jupyter
Me las arreglé para configurar Spark/Pyspark en Jupyter/Ipython (usando Python 3.x).
Configuración inicial del sistema
En mi Python instalado OS Xi usando Anaconda. La versión predeterminada de Python que he instalado actualmente es 3.4.4 (Anaconda 2.4.0). Tenga en cuenta que también he instalado una versión 2.x de Python usando conda create -n python2 python=2.7
.
Instalación de chispa
Este es en realidad el paso más simple; Descargue los últimos binarios en ~/Applications
o algún otro directorio de su elección. A continuación, desgaste del archivo tar -xzf spark-X.Y.Z-bin-hadoopX.Y.tgz
. Para facilitar el acceso a Spark, cree un enlace simbólico a la chispa:
ln -s ~/Applications/spark-X.Y.Z-bin-hadoopX.Y ~/Applications/spark
Por último, agregue el enlace simbólico Spark a la ruta:
export SPARK_HOME=~/Applications/spark
export PATH=$SPARK_HOME/bin:$PATH
Ahora puede ejecutar Spark/Pyspark localmente: simplemente invocar spark-shell
o pyspark
.
Configuración de Jupyter
Para usar Spark desde dentro de un cuaderno de Jupyter, prepare lo siguiente para PYTHONPATH
:
export PYTHONPATH=$SPARKHOME/python/lib/py4j-0.8.2.1-src.zip:$SPARKHOME/python/:$PYTHONPATH
Se pueden encontrar más detalles aquí.
Solución
Asumir que el resto de su configuración es correcto, todo lo que tiene que hacer es hacer spark-csv
Jar disponible para su programa. Hay algunas maneras en que puedes lograr esto:
Descargue manualmente los frascos requeridos que incluyen
spark-csv
y analizador CSV (por ejemploorg.apache.commons.commons-csv
) y póngalos en algún lugar delCLASSPATH
.usando
--packages
Opción (use la versión Scala que se ha utilizado para construir Spark. Las versiones previas a la construcción usan 2.10):usando
PYSPARK_SUBMIT_ARGS
Variable ambiental:export PACKAGES="com.databricks:spark-csv_2.11:1.3.0" export PYSPARK_SUBMIT_ARGS="--packages ${PACKAGES} pyspark-shell"
Agregar cadena de Gradle a
spark.jars.packages
enconf/spark-defaults.conf
:spark.jars.packages com.databricks:spark-csv_2.11:1.3.0
Otros consejos
Use el siguiente procedimiento en su Mac-
- vi a ~/.bash_profile (~/.zshrc si estás en ese tren)
- Pegue la siguiente entrada (asegúrese de especificar su versión deseada de Spark-CSV)-
export PYSPARK_SUBMIT_ARGS="--packages com.databricks:spark-csv_2.11:1.3.0 $PYSPARK_SUBMIT_ARGS"
A partir de ahí, ejecute 'Notebook Ipython' y pruebe con algo como esto,
import pyspark as ps
from pyspark.sql import SQLContext
sc = ps.SparkContext()
input_csv = 'file:////PATH_TO_CSV_ON_LOCAL_FILESYSTEM'
df=sqlContext.read.load(input_csv,format='com.databricks.spark.csv', header='true', inferSchema='true')
df.dtypes # Returns the csv's schema breakdown with types