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