---
# System prepended metadata

title: Big Data. 007.  Pandas i Spark SQL.
tags: [' Big Data', DAM]

---

---
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
![](https://i.imgur.com/xsDOz6H.png)
![](http://spark.apache.org/images/spark-logo.png)

# 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()
```

