{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# PIG et Param\u00e8tres (Cloudera) (correction)\n", "\n", "Correction."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [{"data": {"text/html": ["Plan\n", "
run previous cell, wait for 2 seconds
\n", ""], "text/plain": [""]}, "execution_count": 2, "metadata": {}, "output_type": "execute_result"}], "source": ["from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Connexion au cluster\n", "\n", "On prend le cluster [Cloudera](http://www.xavierdupre.fr/app/ensae_teaching_cs/helpsphinx/notebooks/td3a_cenonce_session6.html#p2). Il faut ex\u00e9cuter ce script pour pouvoir notifier au notebook que la variable ``params`` existe."]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [{"data": {"text/html": ["
server + credentials\n", "
password \n", "
server \n", "
username \n", "
\n", ""], "text/plain": [""]}, "execution_count": 3, "metadata": {}, "output_type": "execute_result"}], "source": ["import pyensae\n", "from pyquickhelper.ipythonhelper import open_html_form\n", "params={\"server\":\"df...fr\", \"username\":\"\", \"password\":\"\"}\n", "open_html_form(params=params,title=\"server + credentials\", key_save=\"params\")"]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [{"data": {"text/plain": [""]}, "execution_count": 4, "metadata": {}, "output_type": "execute_result"}], "source": ["import pyensae\n", "%load_ext pyensae\n", "%load_ext pyenbc\n", "password = params[\"password\"]\n", "server = params[\"server\"]\n", "username = params[\"username\"]\n", "client = %remote_open\n", "client"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Exercice 1 : min, max\n", "\n", "On ajoute deux param\u00e8tres pour construire l'histogramme entre deux valeurs ``a``,``b``. Ajouter ces deux param\u00e8tres au nom du fichier de sortie peut para\u00eetre raisonnable mais l'interpr\u00e9teur a du mal \u00e0 identifier les param\u00e8tres ``Undefined parameter : bins_``. On utilise des tirets."]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": ["%%PIG histogramab.pig\n", "\n", "values = LOAD 'random/random.sample.txt' USING PigStorage('\\t') AS (x:double);\n", "\n", "values_f = FILTER values BY x >= $a AND x <= $b ; -- ligne ajout\u00e9e\n", "\n", "values_h = FOREACH values_f GENERATE x, ((int)(x / $bins)) * $bins AS h ;\n", "\n", "hist_group = GROUP values_h BY h ;\n", "\n", "hist = FOREACH hist_group GENERATE group, COUNT(values_h) AS nb ;\n", "\n", "STORE hist INTO 'random/histo_$bins-$a-$b.txt' USING PigStorage('\\t') ;"]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": ["if client.dfs_exists(\"random/histo_0.1-0.2-0.8.txt\"):\n", " client.dfs_rm(\"random/histo_0.1-0.2-0.8.txt\", recursive=True)"]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"data": {"text/plain": ["('', '')"]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["client.pig_submit(\"histogramab.pig\", redirection=\"redirection\", \n", " params =dict(bins=\"0.1\", a=\"0.2\", b=\"0.8\") )"]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [{"data": {"text/html": ["
\n", "Spillable Memory Manager spill count : 0\n", "Total bags proactively spilled: 0\n", "Total records proactively spilled: 0\n", "\n", "Job DAG:\n", "job_1414491244634_0189\n", "\n", "\n", "2014-12-03 22:55:47,929 [main] INFO  org.apache.hadoop.mapred.ClientServiceDelegate - Application state is completed. FinalApplicationStatus=SUCCEEDED. Redirecting to job history server\n", "2014-12-03 22:55:48,031 [main] INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - Success!\n", "\n", "
"], "text/plain": [""]}, "execution_count": 8, "metadata": {}, "output_type": "execute_result"}], "source": ["%remote_cmd tail redirection.err"]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [{"data": {"text/html": ["
\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
attributescodealiasfoldersizedatetimenameisdir
0 drwxr-xr-x - xavierdupre xavierdupre 0 2014-12-03 22:55 random/histo_0.1-0.2-0.8.txt True
1 drwxr-xr-x - xavierdupre xavierdupre 0 2014-11-28 00:11 random/histo_0.1.txt True
2 -rw-r--r-- 3 xavierdupre xavierdupre 202586 2014-11-27 23:38 random/random.sample.txt False
\n", "
"], "text/plain": [" attributes code alias folder size date time \\\n", "0 drwxr-xr-x - xavierdupre xavierdupre 0 2014-12-03 22:55 \n", "1 drwxr-xr-x - xavierdupre xavierdupre 0 2014-11-28 00:11 \n", "2 -rw-r--r-- 3 xavierdupre xavierdupre 202586 2014-11-27 23:38 \n", "\n", " name isdir \n", "0 random/histo_0.1-0.2-0.8.txt True \n", "1 random/histo_0.1.txt True \n", "2 random/random.sample.txt False "]}, "execution_count": 9, "metadata": {}, "output_type": "execute_result"}], "source": ["%dfs_ls random"]}, {"cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [{"data": {"text/plain": ["'random/histo_0.1-0.2-0.8.txt'"]}, "execution_count": 10, "metadata": {}, "output_type": "execute_result"}], "source": ["if os.path.exists(\"histo.txt\") : os.remove(\"histo.txt\")\n", "client.download_cluster(\"random/histo_0.1-0.2-0.8.txt\",\"histo.txt\", merge=True)"]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [{"data": {"text/plain": [""]}, "execution_count": 11, "metadata": {}, "output_type": "execute_result"}, {"data": {"image/png": "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\nAIb4fxkF1RhgMH5VAAAAAElFTkSuQmCC\n", "text/plain": [""]}, "metadata": {}, "output_type": "display_data"}], "source": ["import matplotlib.pyplot as plt\n", "plt.style.use('ggplot')\n", "import pandas\n", "df = pandas.read_csv(\"histo.txt\", sep=\"\\t\",names=[\"bin\",\"nb\"])\n", "df.plot(x=\"bin\",y=\"nb\",kind=\"bar\")"]}, {"cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [], "source": []}], "metadata": {"kernelspec": {"display_name": "Python 3", "language": "python", "name": "python3"}, "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.4"}}, "nbformat": 4, "nbformat_minor": 2}