Skip to content

Instantly share code, notes, and snippets.

@bsmedberg
Last active December 10, 2015 22:24
Show Gist options
  • Save bsmedberg/052348bfb2f3cd191808 to your computer and use it in GitHub Desktop.
Save bsmedberg/052348bfb2f3cd191808 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{"nbformat_minor": 0, "cells": [{"source": "### Telemetry Hello World", "cell_type": "markdown", "metadata": {}}, {"source": "This is a very a brief introduction to Spark and Telemetry in Python. You should have a look at the [tutorial](https://gist.github.com/vitillo/25a20b7c8685c0c82422) in Scala and the associated [talk](http://www.slideshare.net/RobertoAgostinoVitil/spark-meets-telemetry) if you are interested to learn more about Spark.", "cell_type": "markdown", "metadata": {}}, {"execution_count": 1, "cell_type": "code", "source": "import ujson as json\nimport matplotlib.pyplot as plt\nimport pandas as pd\nimport numpy as np\nimport plotly.plotly as py\n\nfrom moztelemetry import get_pings, get_pings_properties, get_one_ping_per_client, get_clients_history\n\n%pylab inline", "outputs": [{"output_type": "stream", "name": "stdout", "text": "Populating the interactive namespace from numpy and matplotlib\n"}], "metadata": {"scrolled": true, "collapsed": false, "trusted": false}}, {"source": "### Basics", "cell_type": "markdown", "metadata": {}}, {"source": "The goal of this example is to plot the startup distribution for each OS. Let's see how many parallel workers we have at our disposal:", "cell_type": "markdown", "metadata": {}}, {"execution_count": 2, "cell_type": "code", "source": "sc.defaultParallelism", "outputs": [{"execution_count": 2, "output_type": "execute_result", "data": {"text/plain": "16"}, "metadata": {}}], "metadata": {"collapsed": false, "trusted": false}}, {"source": "Let's fetch 10% of Telemetry submissions for a given build-id...", "cell_type": "markdown", "metadata": {}}, {"execution_count": 4, "cell_type": "code", "source": "pings = get_pings(sc, app=\"Firefox\", channel=\"nightly\", build_id=(\"20150520000000\", \"20150520999999\"), fraction=0.1)", "outputs": [], "metadata": {"collapsed": false, "trusted": false}}, {"source": "... and extract only the attributes we need from the Telemetry submissions:", "cell_type": "markdown", "metadata": {}}, {"execution_count": 5, "cell_type": "code", "source": "subset = get_pings_properties(pings, [\"clientId\",\n \"environment/system/os/name\",\n \"payload/simpleMeasurements/firstPaint\"])", "outputs": [], "metadata": {"collapsed": false, "trusted": false}}, {"source": "Let's filter out submissions with an invalid startup time:", "cell_type": "markdown", "metadata": {}}, {"execution_count": 6, "cell_type": "code", "source": "subset = subset.filter(lambda p: p.get(\"payload/simpleMeasurements/firstPaint\", -1) >= 0)", "outputs": [], "metadata": {"collapsed": false, "trusted": false}}, {"source": "To prevent pseudoreplication, let's consider only a single submission for each client. As this step requires a distributed shuffle, it should always be run only after extracting the attributes of interest with *get_pings_properties*.", "cell_type": "markdown", "metadata": {}}, {"execution_count": 7, "cell_type": "code", "source": "subset = get_one_ping_per_client(subset)", "outputs": [], "metadata": {"collapsed": false, "trusted": false}}, {"source": "How many pings are we looking at?", "cell_type": "markdown", "metadata": {}}, {"execution_count": 8, "cell_type": "code", "source": "subset.count()", "outputs": [{"execution_count": 8, "output_type": "execute_result", "data": {"text/plain": "1195"}, "metadata": {}}], "metadata": {"collapsed": false, "trusted": false}}, {"source": "Let's group the startup timings by OS:", "cell_type": "markdown", "metadata": {}}, {"execution_count": 9, "cell_type": "code", "source": "grouped = subset.map(lambda p: (p[\"environment/system/os/name\"], p[\"payload/simpleMeasurements/firstPaint\"])).groupByKey().collectAsMap()", "outputs": [], "metadata": {"collapsed": false, "trusted": false}}, {"source": "And finally plot the data:", "cell_type": "markdown", "metadata": {}}, {"execution_count": 10, "cell_type": "code", "source": "frame = pd.DataFrame({x: np.log10(pd.Series(list(y))) for x, y in grouped.items()})\nplt.figure(figsize=(17, 7))\nframe.boxplot(return_type=\"axes\")\nplt.ylabel(\"log10(firstPaint)\")\nplt.show()", "outputs": [{"output_type": "display_data", "data": {"image/png": "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\ny4JnAe2EHOEAAAAASUVORK5CYII=\n", "text/plain": "<matplotlib.figure.Figure at 0x7f0ddd074b50>"}, "metadata": {}}], "metadata": {"collapsed": false, "trusted": false}}, {"source": "###Histograms", "cell_type": "markdown", "metadata": {}}, {"source": "Let's fetch some pings first:", "cell_type": "markdown", "metadata": {}}, {"execution_count": 12, "cell_type": "code", "source": "pings = get_pings(sc, app=\"Firefox\", channel=\"nightly\", submission_date=\"20150426\", fraction=0.1)", "outputs": [], "metadata": {"collapsed": true, "trusted": false}}, {"source": "Let's extract a histogram from the submissions:", "cell_type": "markdown", "metadata": {}}, {"execution_count": 13, "cell_type": "code", "source": "histograms = get_pings_properties(pings, \"payload/histograms/GC_MARK_MS\", with_processes=True)", "outputs": [], "metadata": {"collapsed": false, "trusted": false}}, {"source": "The API returns three distinct histograms for each submission:\n- a histogram for the parent process (*GC_MARK_MS_parent*)\n- an aggregated histogram for the child processes (*GC_MARK_MS_children*)\n- the aggregate of the parent and child histograms (*GC_MARK*)", "cell_type": "markdown", "metadata": {}}, {"source": "Let's aggregate the histogram over all submissions and plot it:", "cell_type": "markdown", "metadata": {}}, {"execution_count": 14, "cell_type": "code", "source": "def aggregate_arrays(xs, ys):\n if xs is None:\n return ys\n \n if ys is None:\n return xs\n \n return xs + ys\n \naggregate = histograms.map(lambda p: p[\"payload/histograms/GC_MARK_MS\"]).reduce(aggregate_arrays)\naggregate.plot(kind=\"bar\", figsize=(15, 7))", "outputs": [{"execution_count": 14, "output_type": "execute_result", "data": {"text/plain": "<matplotlib.axes._subplots.AxesSubplot at 0x7f0d94689150>"}, "metadata": {}}, {"output_type": "display_data", "data": {"image/png": "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\nAAAASUVORK5CYII=\n", "text/plain": "<matplotlib.figure.Figure at 0x7f0d946aa450>"}, "metadata": {}}], "metadata": {"collapsed": false, "trusted": false}}, {"source": "#### Exercises", "cell_type": "markdown", "metadata": {"collapsed": true}}, {"source": "1) Plot the distribution of GC_MS faceted by OS. ", "cell_type": "markdown", "metadata": {}}, {"execution_count": null, "cell_type": "code", "source": "", "outputs": [], "metadata": {"collapsed": true, "trusted": false}}], "nbformat": 4, "metadata": {"kernelspec": {"display_name": "Python 2", "name": "python2", "language": "python"}, "language_info": {"mimetype": "text/x-python", "nbconvert_exporter": "python", "version": "2.7.9", "name": "python", "file_extension": ".py", "pygments_lexer": "ipython2", "codemirror_mode": {"version": 2, "name": "ipython"}}}}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment