---
title: Big Data. 007. Pandas i Spark SQL.
tags: DAM, Big Data
---
[Link en MarkDown](https://hackmd.io/@JdaXaviQ/r1kyHWtHi)
# DAM. Big Data 007. Pandas i Spark SQL


# Utilitzant Pandas per crear Spark dataframes a partir de pàgines web
[Versió Google Collab que permet experimentar amb el codi](https://colab.research.google.com/drive/1frkDGAmARoq0lclnnOu1e9GebURMrTf1?usp=sharing)
## Objectiu
Realitzar consultes SQL directament sobre una web que conté dades en format tabular.
Les eines utilitzades seran Spark SQL i Pandas. Pandas és una llibreria de python que es basa en les estructures de dades de NumPy i que està orientada a l'anàlisi i processament de dades.
## Configuració inicial
Necessitem tenir instal·lats al nostre sistema les biblioteques de pyspark i pandas (i java 8 [apt install openjdk-8-jdk]):
```python
!python3 -m pip install --upgrade pip
!python3 -m pip install pandas
!python3 -m pip install pyspark
!python3 -m pip install findspark
```
A continuació podem importar les llibreries que acabem d'instal·lar i inicialitzar findspark i crear el nostre SparkContext com ja haviem fet al anterior Lab:
```python
import findspark
import pandas as pd
from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
findspark.init()
sc = SparkContext()
spark = SparkSession \
.builder \
.appName("Python Spark DataFrames basic example") \
.config("spark.some.config.option", "some-value") \
.getOrCreate()
```
Ara ja ho tenim tot a punt per començar a obtenir dades directament d'internet. Per exemple, podem explorar quina informació tabular proporciona la pàgina de la viquipèdia sobre Python.
```python
info_python = pd.read_html('https://ca.wikipedia.org/wiki/Python')
print(f'He trobat informació de {len(info_python)} taules diferents')
print('i la taula 4 conté informació sobre els tipus de utilitzats admesos a python:')
print(info_python[4].head())
```
Ara que tenim la informació en format tabular podem generar un dataframe d'Spark a partir de qualsevol dataframe de pandas.
```python
tipus_dades = spark.createDataFrame(info_python[4])
```
```python
tipus_dades.printSchema()
```
```python
tipus_dades.show()
```
```python
tipus_dades.createTempView("tipus")
```
```python
spark.sql('SELECT `Descripció`,`Exemples de sintaxi` FROM tipus where Tipus = "float"').show()
spark.sql('SELECT count(*) as qty_mutables FROM tipus where Mutabilitat="Sí"').show()
spark.sql('SELECT Tipus as es_mutable FROM tipus where Mutabilitat="Sí"').show()
```