Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- "cells": [
- {
- "cell_type": "code",
- "execution_count": 13,
- "metadata": {},
- "outputs": [],
- "source": [
- "import pyspark\n",
- "sc = pyspark.SparkContext.getOrCreate()\n",
- "\n",
- "spark = SparkSession \\\n",
- " .builder \\\n",
- " .appName(\"Spark SQL Finger 3\") \\\n",
- " .getOrCreate()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 14,
- "metadata": {},
- "outputs": [],
- "source": [
- "datos_jugadores_regtemp = [\n",
- " (1, 'Manu Ginobili', 30, 35, 8, 8, 5, 2),\n",
- " (2, 'Kobe Bryant', 40, 30, 3, 5, 20, 2),\n",
- " (3, 'LeBron James', 58, 20, 3, 8, 30, 2),\n",
- " (4, 'Andre Iguodala', 35, 15, 5, 10, 20, 4),\n",
- " (5, 'Carmelo Anthony', 40, 10, 6, 6, 22, 1)\n",
- "]\n",
- "\n",
- "datos_jugadores_po = [\n",
- " #1, 2, 3, 4, 5, 6 ,7 ,8 ,9\n",
- " (1, 1, 1, 8, 3, 4, 2, 12, 1),\n",
- " (1, 1, 3, 4, 1, 5, 2, 15, 1),\n",
- " (1, 1, 4, 12, 2, 3, 2, 10, 1),\n",
- " (2, 1, 1, 18, 3, 3, 3, 8, 2),\n",
- " (2, 1, 4, 9, 3, 4, 1, 5, 1),\n",
- " (3, 2, 1, 12, 6, 4, 1, 3, 1),\n",
- " (3, 2, 2, 15, 8, 5, 3, 7, 1),\n",
- " (3, 2, 3, 22, 6, 2, 1, 4, 2),\n",
- " (3, 2, 4, 18, 10, 4, 2, 4, 1),\n",
- " (4, 2, 1, 12, 2, 1, 1, 9, 0),\n",
- " (4, 2, 2, 25, 8, 4, 2, 4, 3),\n",
- " (4, 2, 4, 15, 4, 2, 2, 8, 1),\n",
- " (1, 3, 3, 2, 1, 0, 0, 3, 2),\n",
- " (5, 3, 1, 8, 1, 2, 0, 6, 0),\n",
- " (5, 3, 1, 7, 0, 0, 1, 6, 1),\n",
- "]"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 15,
- "metadata": {},
- "outputs": [],
- "source": [
- "df_tr = spark.createDataFrame(datos_jugadores_regtemp)\n",
- "df_po = spark.createDataFrame(datos_jugadores_po)"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 16,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "['_1', '_2', '_3', '_4', '_5', '_6', '_7', '_8']"
- ]
- },
- "execution_count": 16,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# La columna del promedio de asistencias es _4.\n",
- "df_tr.columns"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 17,
- "metadata": {},
- "outputs": [
- {
- "data": {
- "text/plain": [
- "['_1', '_2', '_3', '_4', '_5', '_6', '_7', '_8', '_9']"
- ]
- },
- "execution_count": 17,
- "metadata": {},
- "output_type": "execute_result"
- }
- ],
- "source": [
- "# La columna con la cantidad de asistencias es _8.\n",
- "df_po.columns"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 18,
- "metadata": {},
- "outputs": [],
- "source": [
- "df_tr.createOrReplaceTempView('temporada_regular')\n",
- "df_po.createOrReplaceTempView('playoffs')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 19,
- "metadata": {},
- "outputs": [],
- "source": [
- "# Creamos una tabla nueva agrupando por jugador y partido, para calcular el total de asistencias por partido.\n",
- "po_suma = spark.sql(\"SELECT _1, _2, sum(_8) as asistencias_totales FROM playoffs GROUP BY _1,_2\")\n",
- "po_suma.createOrReplaceTempView('po_asistencias')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 20,
- "metadata": {},
- "outputs": [],
- "source": [
- "# La columna _2 en \"temporada_regular\" es el nombre del jugador, _1 es el id de jugador en ambas tablas.\n",
- "prom_y_max_asistencias = spark.sql(\"SELECT _2 as nombre, _4 as prom_asistencias, max_asistencias FROM temporada_regular as tr\\\n",
- " JOIN (SELECT _1, max(asistencias_totales) as max_asistencias FROM po_asistencias GROUP BY _1) as po\\\n",
- " ON tr._1 = po._1\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 21,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "+---------------+----------------+---------------+\n",
- "| nombre|prom_asistencias|max_asistencias|\n",
- "+---------------+----------------+---------------+\n",
- "|Carmelo Anthony| 10| 12|\n",
- "| Manu Ginobili| 35| 37|\n",
- "| LeBron James| 20| 18|\n",
- "| Kobe Bryant| 30| 13|\n",
- "| Andre Iguodala| 15| 21|\n",
- "+---------------+----------------+---------------+\n",
- "\n"
- ]
- }
- ],
- "source": [
- "prom_y_max_asistencias.show()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 22,
- "metadata": {},
- "outputs": [],
- "source": [
- "prom_y_max_asistencias.createOrReplaceTempView('resultado')"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 23,
- "metadata": {},
- "outputs": [],
- "source": [
- "query_final = spark.sql(\"SELECT nombre FROM resultado as res WHERE res.max_asistencias > prom_asistencias\")"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": 24,
- "metadata": {},
- "outputs": [
- {
- "name": "stdout",
- "output_type": "stream",
- "text": [
- "+---------------+\n",
- "| nombre|\n",
- "+---------------+\n",
- "|Carmelo Anthony|\n",
- "| Manu Ginobili|\n",
- "| Andre Iguodala|\n",
- "+---------------+\n",
- "\n"
- ]
- }
- ],
- "source": [
- "query_final.show()"
- ]
- },
- {
- "cell_type": "code",
- "execution_count": null,
- "metadata": {},
- "outputs": [],
- "source": []
- }
- ],
- "metadata": {
- "kernelspec": {
- "display_name": "PySpark",
- "language": "python",
- "name": "pyspark"
- },
- "language_info": {
- "codemirror_mode": {
- "name": "ipython",
- "version": 3
- },
- "file_extension": ".py",
- "mimetype": "text/x-python",
- "name": "python",
- "nbconvert_exporter": "python",
- "pygments_lexer": "ipython3",
- "version": "3.6.6"
- }
- },
- "nbformat": 4,
- "nbformat_minor": 2
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement