{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# PIG et Param\u00e8tres (Azure) (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 + hadoop + credentials\n", "
blob_storage \n", "
hadoop_server \n", "
password1 \n", "
password2 \n", "
username \n", "
\n", ""], "text/plain": [""]}, "execution_count": 3, "metadata": {}, "output_type": "execute_result"}], "source": ["from pyquickhelper.ipythonhelper import open_html_form\n", "params={\"blob_storage\":\"\", \"password1\":\"\", \"hadoop_server\":\"\", \"password2\":\"\", \"username\":\"alias\"}\n", "open_html_form(params=params,title=\"server + hadoop + credentials\", key_save=\"blobhp\")"]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [{"data": {"text/plain": ["(,\n", " )"]}, "execution_count": 4, "metadata": {}, "output_type": "execute_result"}], "source": ["import pyensae\n", "%load_ext pyensae\n", "%load_ext pyenbc\n", "blobstorage = blobhp[\"blob_storage\"]\n", "blobpassword = blobhp[\"password1\"]\n", "hadoop_server = blobhp[\"hadoop_server\"]\n", "hadoop_password = blobhp[\"password2\"]\n", "username = blobhp[\"username\"]\n", "client, bs = %hd_open\n", "client, bs"]}, {"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 '$CONTAINER/$PSEUDO/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 '$CONTAINER/$PSEUDO/random/histo_$bins-$a-$b.txt' USING PigStorage('\\t') ;"]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": ["if client.exists(bs, client.account_name, \"$PSEUDO/random/histo_0.1-0.2-0.8.txt\"):\n", " r = client.delete_folder (bs, client.account_name, \"$PSEUDO/random/histo_0.1-0.2-0.8.txt\")\n", " print(r) "]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"data": {"text/plain": ["{'id': 'job_1416874839254_0202'}"]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["jid = client.pig_submit(bs, client.account_name, \"histogramab.pig\", \n", " params = dict(bins=\"0.1\", a=\"0.2\", b=\"0.8\") )\n", "jid"]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [{"data": {"text/plain": ["('job_1416874839254_0202', '100% complete', True)"]}, "execution_count": 8, "metadata": {}, "output_type": "execute_result"}], "source": ["st = %hd_job_status jid[\"id\"]\n", "st[\"id\"],st[\"percentComplete\"],st[\"status\"][\"jobComplete\"]"]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [{"data": {"text/html": ["
\n", "\n", "Job DAG:\n", "job_1416874839254_0203\n", "\n", "\n", "2014-12-03 22:17:28,903 [main] WARN  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - No FileSystem for scheme: wasb. Not creating success file\n", "2014-12-03 22:17:28,903 [main] INFO  org.apache.hadoop.yarn.client.RMProxy - Connecting to ResourceManager at headnodehost/100.74.20.101:9010\n", "2014-12-03 22:17:28,965 [main] INFO  org.apache.hadoop.mapred.ClientServiceDelegate - Application state is completed. FinalApplicationStatus=SUCCEEDED. Redirecting to job history server\n", "2014-12-03 22:17:29,784 [main] INFO  org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher - Success!\n", "\n", "

"], "text/plain": [""]}, "execution_count": 9, "metadata": {}, "output_type": "execute_result"}], "source": ["%hd_tail_stderr jid[\"id\"]"]}, {"cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [{"data": {"text/plain": ["'histo.txt'"]}, "execution_count": 10, "metadata": {}, "output_type": "execute_result"}], "source": ["import os\n", "if os.path.exists(\"histo.txt\") : os.remove(\"histo.txt\")\n", "%blob_downmerge /$PSEUDO/random/histo_0.1-0.2-0.8.txt histo.txt"]}, {"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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\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}