From 94af2ac5a5f790bc1bfe60207a59af468747cee2 Mon Sep 17 00:00:00 2001 From: Sven Kreiss Date: Sat, 13 Feb 2016 08:17:09 -0500 Subject: [PATCH] update docs --- docs/sphinx/conf.py | 28 +++++--- docs/sphinx/images/favicon.ico | Bin 0 -> 6461 bytes docs/sphinx/images/logo-w600.png | Bin 0 -> 57309 bytes docs/sphinx/index.rst | 112 ++++++++++++++++++++++++++++--- pysparkling/rdd.py | 3 + 5 files changed, 126 insertions(+), 17 deletions(-) create mode 100644 docs/sphinx/images/favicon.ico create mode 100644 docs/sphinx/images/logo-w600.png diff --git a/docs/sphinx/conf.py b/docs/sphinx/conf.py index 8a67970cc..6a6e8b3e6 100644 --- a/docs/sphinx/conf.py +++ b/docs/sphinx/conf.py @@ -17,6 +17,18 @@ import shlex import sphinx_rtd_theme +# extract version from __init__.py +pysparkling_init_filename = os.path.join( + os.path.dirname(__file__), + '..', + '..', + 'pysparkling', + '__init__.py', +) +with open(pysparkling_init_filename, 'r') as f: + version_line = [l for l in f if l.startswith('__version__')][0] + PYSPARKLING_VERSION = version_line.split('=')[1].strip()[1:-1] + # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. @@ -56,7 +68,7 @@ # General information about the project. project = u'pysparkling' -copyright = u'2015, Sven Kreiss' +copyright = u'2015-2016, a project started by Sven Kreiss' author = u'Sven Kreiss' # The version info for the project you're documenting, acts as replacement for @@ -64,9 +76,9 @@ # built documents. # # The short X.Y version. -version = '0.3' +version = PYSPARKLING_VERSION # The full version, including alpha/beta/rc tags. -release = '0.3.8' +release = PYSPARKLING_VERSION # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. @@ -90,7 +102,7 @@ #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. -#add_function_parentheses = True +add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). @@ -138,12 +150,12 @@ # The name of an image file (relative to this directory) to place at the top # of the sidebar. -#html_logo = None +# html_logo = 'images/logo-w600.png' # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. -#html_favicon = None +html_favicon = 'images/favicon.ico' # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, @@ -180,10 +192,10 @@ #html_split_index = False # If true, links to the reST sources are added to the pages. -#html_show_sourcelink = True +html_show_sourcelink = False # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. -#html_show_sphinx = True +html_show_sphinx = False # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True diff --git a/docs/sphinx/images/favicon.ico b/docs/sphinx/images/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..01365747d59ff59e01d2cdb865368737f72a7d04 GIT binary patch literal 6461 zcmeHLKWGzS6n~eP5ThaIAcYE&Ns5CWh;@=CCB3gBW-{-w;d3MC$@k~xc|@C@ZVg^KmLFA%K}P3%P-YtjHuqW_ZRhX zmE2^#Onqz*LN8-&c=L5LCi7C`oAk2la51o5H?vrtua|jka|D&OeV6`d`Y!#^^H(U7`Zs0 zI_x_T1}^Wn-+QGxJluCcIxh}{g^L5CH+OV(kRH8|MGcqC3R+X?AGku`r4S0y+c7A@0T0)y8B_Ox?Bz1z^h-&ZyML1 ztUX(3#Ak-d+!NUGlnvZ*dujFL{I1f?ZS;IgV8;*Rbgp~w!sx?Z-hK)L#r)&`(!@{k Cg;wAI literal 0 HcmV?d00001 diff --git a/docs/sphinx/images/logo-w600.png b/docs/sphinx/images/logo-w600.png new file mode 100644 index 0000000000000000000000000000000000000000..9ef54aa94be4dbcbc5ebb0a61b0328b4d2c30e08 GIT binary patch literal 57309 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 G75+cPn6AA5 literal 0 HcmV?d00001 diff --git a/docs/sphinx/index.rst b/docs/sphinx/index.rst index 3a747bff5..772f15034 100644 --- a/docs/sphinx/index.rst +++ b/docs/sphinx/index.rst @@ -10,15 +10,109 @@ Welcome to pysparkling's documentation! ======================================= -Version 0.2 docs: http://pysparkling.trivial.io/v0.2/ - -Please read the README at https://github.com/svenkreiss/pysparkling and -checkout the examples in this notebook: -https://github.com/svenkreiss/pysparkling/blob/master/docs/demo.ipynb - -``pysparkling`` is native Python implementation of Spark's RDD interface. The primary objective to remove the dependency on the JVM and Hadoop. The focus is on having a lightweight and fast implementation for small datasets at the expense of some data resilience features and some parallel processing features. It is a drop-in replacement for PySpark's SparkContext and RDD. - -Use case: you have a pipeline that processes 100k input documents and converts them to normalized features. They are used to train a local scikit-learn classifier. The preprocessing is perfect for a full Spark task. Now, you want to use this trained classifier in an API endpoint. Assume you need the same pre-processing pipeline for a single document per API call. This does not have to be done in parallel, but there should be only a small overhead in initialization and preferably no dependency on the JVM. This is what pysparkling is for. +**Pysparkling** provides a faster, more responsive way to develop programs +for PySpark. It enables code intended for Spark applications to execute +entirely in Python, without incurring the overhead of initializing and +passing data through the JVM and Hadoop. The focus is on having a lightweight +and fast implementation for small datasets at the expense of some data +resilience features and some parallel processing features. + +**How does it work?** To switch execution of a script from PySpark to pysparkling, +have the code initialize a pysparkling Context instead of a SparkContext, and +use the pysparkling Context to set up your RDDs. The beauty is you don't have +to change a single line of code after the Context initialization, because +pysparkling's API is (almost) exactly the same as PySpark's. Since it's so easy +to switch between PySpark and pysparkling, you can choose the right tool for your +use case. + +**When would I use it?** Say you are writing a Spark application because you +need robust computation on huge datasets, but you also want the same application +to provide fast answers on a small dataset. You're finding Spark is not responsive +enough for your needs, but you don't want to rewrite an entire separate application +for the *small-answers-fast* problem. You'd rather reuse your Spark code but somehow +get it to run fast. Pysparkling bypasses the stuff that causes Spark's long startup +times and less responsive feel. + +Here are a few areas where pysparkling excels: + +- Small to medium-scale exploratory data analysis +- Application prototyping +- Low-latency web deployments +- Unit tests + +*Example:* you have a pipeline that processes 100k input documents +and converts them to normalized features. They are used to train a local +scikit-learn classifier. The preprocessing is perfect for a full Spark +task. Now, you want to use this trained classifier in an API +endpoint. Assume you need the same pre-processing pipeline for a single +document per API call. This does not have to be done in parallel, but there +should be only a small overhead in initialization and preferably no +dependency on the JVM. This is what ``pysparkling`` is for. + +.. image:: https://badge.fury.io/py/pysparkling.svg + :target: https://pypi.python.org/pypi/pysparkling/ +.. image:: https://img.shields.io/pypi/dm/pysparkling.svg + :target: https://pypi.python.org/pypi/pysparkling/ +.. image:: https://badges.gitter.im/Join%20Chat.svg + :alt: Join the chat at https://gitter.im/svenkreiss/pysparkling + :target: https://gitter.im/svenkreiss/pysparkling?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge + + +Install +======= + +.. code-block:: bash + + pip install pysparkling[s3,hdfs,http] + + +Features +======== + +* Supports multiple URI scheme: ``s3://``, ``hdfs://``, ``http://`` and ``file://``. + Specify multiple files separated by comma. + Resolves ``*`` and ``?`` wildcards. +* Handles ``.gz``, ``.zip``, ``.lzma``, ``.xz``, ``.bz2``, ``.tar``, + ``.tar.gz`` and ``.tar.bz2`` compressed files. + Supports reading of ``.7z`` files. +* Parallelization via ``multiprocessing.Pool``, + ``concurrent.futures.ThreadPoolExecutor`` or any other Pool-like + objects that have a ``map(func, iterable)`` method. + +* Plain pysparkling does not have any dependencies (use ``pip install pysparkling``). + Some file access methods have optional dependencies: + ``boto`` for AWS S3, ``requests`` for http, ``hdfs`` for hdfs + + +Examples +======== + +Some demos are in the notebooks +`docs/demo.ipynb `_ +and +`docs/iris.ipynb `_ +. + +**Word Count** + +.. code-block:: python + + from pysparkling import Context + + counts = Context().textFile( + 'README.rst' + ).map( + lambda line: ''.join(ch if ch.isalnum() else ' ' for ch in line) + ).flatMap( + lambda line: line.split(' ') + ).map( + lambda word: (word, 1) + ).reduceByKey( + lambda a, b: a + b + ) + print(counts.collect()) + +which prints a long list of pairs of words and their counts. Contents: diff --git a/pysparkling/rdd.py b/pysparkling/rdd.py index 4e26e472b..5421a4a25 100644 --- a/pysparkling/rdd.py +++ b/pysparkling/rdd.py @@ -616,7 +616,9 @@ def fullOuterJoin(self, other, numPartitions=None): .. note:: Creating the new RDD is currently implemented as a local operation. + Example: + >>> from pysparkling import Context >>> sc = Context() >>> rdd1 = sc.parallelize([('a', 0), ('b', 1)]) @@ -625,6 +627,7 @@ def fullOuterJoin(self, other, numPartitions=None): ... rdd1.fullOuterJoin(rdd2).collect() ... ) # doctest: +IGNORE_UNICODE [('a', (0, None)), ('b', (1, 2)), ('c', (None, 3))] + """ grouped = self.cogroup(other, numPartitions)