Data Algorithms with Spark: Recipes and Design Patterns for Scaling Up using PySpark