Pyspark con Google Colab
Usando pyspark en google colab
PySpark en Google Colab Automatico
- Instalacion Marzo/2020
- Intalacion Automatica
- Instalacion Java
- Instalacion de Spark
- Ejemplo de Uso de pyspark
Abrir en Google Colab:
Instalacion Rapida Marzo/ 2020
De forma General para usar pyspark en Colab Marzo/2020 seria con los siguientes comandos en una celda en Colab:
Instalar Java
!apt-get install openjdk-8-jdk-headless -qq > /dev/null
import os # libreria de manejo del sistema operativo
os.system("wget -q https://www-us.apache.org/dist/spark/spark-2.4.5/spark-2.4.5-bin-hadoop2.7.tgz")
os.system("tar xf /spark-2.4.5-bin-hadoop2.7.tgz")
instalar pyspark
!pip install -q pyspark
# Variables de Entorno
os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-8-openjdk-amd64"
os.environ["SPARK_HOME"] = f"/content/{ver_spark}-bin-hadoop2.7"
# Cargar Pyspark
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("Test_spark").master("local[*]").getOrCreate()
spark
Pero cuando salga una nueva version de spark sera necesario actualizar los links de descarga, ya que siempre borran las versiones 2.x.x cuando sale una nueva.
Lo mejor es configurar automaticamente para que descargue la version que sea mayor que 2.3.4 que es la anterior y menor que spark 3.0.0 que aun se encuentra en desarrollo
Para esto el siguiente código detecta la version actual de spark, la descarga, la descomprime y luego realiza la instalacion de spark en google colab.
Instalacion Automatica
Instalacion de Java
Google Colaboratory funciona en un ambiente linux, por lo tanto se pueden usar comandos shell de linux antecedidos del carácter ‘!’
!apt-get install openjdk-8-jdk-headless -qq > /dev/null
Instalacion de Spark
Obtener automaticamente la ultima version de spark de
from bs4 import BeautifulSoup
import requests
#Obtener las versiones de spark la pagina web
url = 'https://downloads.apache.org/spark/'
r = requests.get(url)
html_doc = r.text
soup = BeautifulSoup(html_doc)
# leer la pagina web y obtener las versiones de spark disponibles
link_files = []
for link in soup.find_all('a'):
link_files.append(link.get('href'))
spark_link = [x for x in link_files if 'spark' in x]
print(spark_link)
[‘spark-2.3.4/’, ‘spark-2.4.5/’, ‘spark-3.0.0-preview2/’]
La version a usar seran las superiores a spark-2.3.4 y menores a spark-3.0.0
obtener la version y eliminar el carácter ‘/’ del final
ver_spark = spark_link[1][:-1] # obtener la version y eliminar el carácter '/' del final
print(ver_spark)
spark-2.4.5
import os # libreria de manejo del sistema operativo
#instalar automaticamente la version deseadda de spark
link = "https://www-us.apache.org/dist/spark/"
os.system(f"wget -q {link}{ver_spark}/{ver_spark}-bin-hadoop2.7.tgz")
os.system(f"tar xf {ver_spark}-bin-hadoop2.7.tgz")
# instalar pyspark
!pip install -q pyspark
|████████████████████████████████| 217.8MB 63kB/s
|████████████████████████████████| 204kB 53.8MB/s
Building wheel for pyspark (setup.py) ... done
Definir variables de entorno
os.environ["JAVA_HOME"] = "/usr/lib/jvm/java-8-openjdk-amd64"
os.environ["SPARK_HOME"] = f"/content/{ver_spark}-bin-hadoop2.7"
Cargar pyspark en el sistema
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("Test_spark").master("local[*]").getOrCreate()
spark
SparkSession - in-memory
SparkContext
- Version
v2.4.5
- Master
local[*]
- AppName
pyspark-shell
Ejemplo de Uso de pyspark
Leer archivo de prueba
archivo = './sample_data/california_housing_train.csv'
df_spark = spark.read.csv(archivo, inferSchema=True, header=True)
# imprimir tipo de archivo
print(type(df_spark))
<class 'pyspark.sql.dataframe.DataFrame'>
¿Numero de registros en el dataframe?
df_spark.count()
17000
Estructura del dataframe
df_spark.printSchema()
root
|-- longitude: double (nullable = true)
|-- latitude: double (nullable = true)
|-- housing_median_age: double (nullable = true)
|-- total_rooms: double (nullable = true)
|-- total_bedrooms: double (nullable = true)
|-- population: double (nullable = true)
|-- households: double (nullable = true)
|-- median_income: double (nullable = true)
|-- median_house_value: double (nullable = true)
¿Nombre de las Columnas de dataframe?
df_spark.columns
['longitude',
'latitude',
'housing_median_age',
'total_rooms',
'total_bedrooms',
'population',
'households',
'median_income',
'median_house_value']
Ver los primeros 20 registros del dataframe
df_spark.show()
+---------+--------+------------------+-----------+--------------+----------+----------+-------------+------------------+
|longitude|latitude|housing_median_age|total_rooms|total_bedrooms|population|households|median_income|median_house_value|
+---------+--------+------------------+-----------+--------------+----------+----------+-------------+------------------+
| -114.31| 34.19| 15.0| 5612.0| 1283.0| 1015.0| 472.0| 1.4936| 66900.0|
| -114.47| 34.4| 19.0| 7650.0| 1901.0| 1129.0| 463.0| 1.82| 80100.0|
| -114.56| 33.69| 17.0| 720.0| 174.0| 333.0| 117.0| 1.6509| 85700.0|
| -114.57| 33.64| 14.0| 1501.0| 337.0| 515.0| 226.0| 3.1917| 73400.0|
| -114.57| 33.57| 20.0| 1454.0| 326.0| 624.0| 262.0| 1.925| 65500.0|
| -114.58| 33.63| 29.0| 1387.0| 236.0| 671.0| 239.0| 3.3438| 74000.0|
| -114.58| 33.61| 25.0| 2907.0| 680.0| 1841.0| 633.0| 2.6768| 82400.0|
| -114.59| 34.83| 41.0| 812.0| 168.0| 375.0| 158.0| 1.7083| 48500.0|
| -114.59| 33.61| 34.0| 4789.0| 1175.0| 3134.0| 1056.0| 2.1782| 58400.0|
| -114.6| 34.83| 46.0| 1497.0| 309.0| 787.0| 271.0| 2.1908| 48100.0|
| -114.6| 33.62| 16.0| 3741.0| 801.0| 2434.0| 824.0| 2.6797| 86500.0|
| -114.6| 33.6| 21.0| 1988.0| 483.0| 1182.0| 437.0| 1.625| 62000.0|
| -114.61| 34.84| 48.0| 1291.0| 248.0| 580.0| 211.0| 2.1571| 48600.0|
| -114.61| 34.83| 31.0| 2478.0| 464.0| 1346.0| 479.0| 3.212| 70400.0|
| -114.63| 32.76| 15.0| 1448.0| 378.0| 949.0| 300.0| 0.8585| 45000.0|
| -114.65| 34.89| 17.0| 2556.0| 587.0| 1005.0| 401.0| 1.6991| 69100.0|
| -114.65| 33.6| 28.0| 1678.0| 322.0| 666.0| 256.0| 2.9653| 94900.0|
| -114.65| 32.79| 21.0| 44.0| 33.0| 64.0| 27.0| 0.8571| 25000.0|
| -114.66| 32.74| 17.0| 1388.0| 386.0| 775.0| 320.0| 1.2049| 44000.0|
| -114.67| 33.92| 17.0| 97.0| 24.0| 29.0| 15.0| 1.2656| 27500.0|
+---------+--------+------------------+-----------+--------------+----------+----------+-------------+------------------+
only showing top 20 rows
Descricipcion Estadistica del dataframe
df_spark.describe().toPandas().transpose()
0 | 1 | 2 | 3 | 4 | |
---|---|---|---|---|---|
summary | count | mean | stddev | min | max |
longitude | 17000 | -119.56210823529375 | 2.0051664084260357 | -124.35 | -114.31 |
latitude | 17000 | 35.6252247058827 | 2.1373397946570867 | 32.54 | 41.95 |
housing_median_age | 17000 | 28.58935294117647 | 12.586936981660406 | 1.0 | 52.0 |
total_rooms | 17000 | 2643.664411764706 | 2179.947071452777 | 2.0 | 37937.0 |
total_bedrooms | 17000 | 539.4108235294118 | 421.4994515798648 | 1.0 | 6445.0 |
population | 17000 | 1429.5739411764705 | 1147.852959159527 | 3.0 | 35682.0 |
households | 17000 | 501.2219411764706 | 384.5208408559016 | 1.0 | 6082.0 |
median_income | 17000 | 3.883578100000021 | 1.9081565183791036 | 0.4999 | 15.0001 |
median_house_value | 17000 | 207300.91235294117 | 115983.76438720895 | 14999.0 | 500001.0 |
Descripcion estadistica de una sola columna (‘median_house_value’)
df_spark.describe(['median_house_value']).show()
+-------+------------------+
|summary|median_house_value|
+-------+------------------+
| count| 17000|
| mean|207300.91235294117|
| stddev|115983.76438720895|
| min| 14999.0|
| max| 500001.0|
+-------+------------------+
De esta forma se puede instalar automaticamente spark en google colab y hacer uno de el de forma gratis.
En la version gratis solo se cuenta con una CPU si se quiere aumentar la capacidad de procesamiento es necesario pagar.