Learning Spark. 2nd Edition

- Autorzy:
- Jules S. Damji, Brooke Wenig, Tathagata Das
- Promocja Przejdź


- Ocena:
- Bądź pierwszym, który oceni tę książkę
- Stron:
- 400
- Dostępne formaty:
-
ePubMobi
Opis książki: Learning Spark. 2nd Edition
Data is bigger, arrives faster, and comes in a variety of formatsâ??and it all needs to be processed at scale for analytics or machine learning. But how can you process such varied workloads efficiently? Enter Apache Spark.
Updated to include Spark 3.0, this second edition shows data engineers and data scientists why structure and unification in Spark matters. Specifically, this book explains how to perform simple and complex data analytics and employ machine learning algorithms. Through step-by-step walk-throughs, code snippets, and notebooks, youâ??ll be able to:
- Learn Python, SQL, Scala, or Java high-level Structured APIs
- Understand Spark operations and SQL Engine
- Inspect, tune, and debug Spark operations with Spark configurations and Spark UI
- Connect to data sources: JSON, Parquet, CSV, Avro, ORC, Hive, S3, or Kafka
- Perform analytics on batch and streaming data using Structured Streaming
- Build reliable data pipelines with open source Delta Lake and Spark
- Develop machine learning pipelines with MLlib and productionize models using MLflow
Wybrane bestsellery
-
Before you can build analytics tools to gain quick insights, you first need to know how to process data in real time. With this practical guide, developers familiar with Apache Spark will learn how to put this in-memory framework to use for streaming data. You’ll discover how Spark enables ...
Stream Processing with Apache Spark. Mastering Structured Streaming and Spark Streaming Stream Processing with Apache Spark. Mastering Structured Streaming and Spark Streaming
(0,00 zł najniższa cena z 30 dni)237.15 zł
279.00 zł(-15%) -
Every enterprise application creates data, including log messages, metrics, user activity, and outgoing messages. Learning how to move these items is almost as important as the data itself. If you're an application architect, developer, or production engineer new to Apache Pulsar, this practical ...(0,00 zł najniższa cena z 30 dni)
237.15 zł
279.00 zł(-15%) -
Apache Spark is amazing when everything clicks. But if you haven’t seen the performance improvements you expected, or still don’t feel confident enough to use Spark in production, this practical book is for you. Authors Holden Karau and Rachel Warren demonstrate performance optimizati...
High Performance Spark. Best Practices for Scaling and Optimizing Apache Spark High Performance Spark. Best Practices for Scaling and Optimizing Apache Spark
(0,00 zł najniższa cena z 30 dni)160.65 zł
189.00 zł(-15%) -
Niniejszy leksykon jest świetną pozycją dla tych osób, które miały już styczność z serwerem Apache lub chcą szybko opanować konkretne zagadnienia związane z jego konfiguracją. Dzięki tej książce poznasz wszystkie dyrektywy, które mogą być przydatne w codziennej pracy. Dowiesz się, jak skonfigurow...(0,00 zł najniższa cena z 30 dni)
14.94 zł
24.90 zł(-40%) -
Dzięki książce Apache. Receptury zapoznasz się z gotowymi przepisami na rozwiązanie ciekawych, specyficznych oraz intrygujących problemów. Nauczysz się instalować serwer z różnych źródeł oraz na różnych platformach. Dowiesz się, w jaki sposób zwiększyć jego bezpieczeństwo, jak uruchomić serwery w...(0,00 zł najniższa cena z 30 dni)
29.40 zł
49.00 zł(-40%) -
Apache is far and away the most widely used web server platform in the world. This versatile server runs more than half of the world's existing web sites. Apache is both free and rock-solid, running more than 21 million web sites ranging from huge e-commerce operations to corporate intranets and ...
Apache: The Definitive Guide. The Definitive Guide, 3rd Edition. 3rd Edition Apache: The Definitive Guide. The Definitive Guide, 3rd Edition. 3rd Edition
(0,00 zł najniższa cena z 30 dni)169.15 zł
199.00 zł(-15%) -
Implement, run, operate, and test data processing pipelines using Apache Beam
-
Serverless computing greatly simplifies software development. Your team can focus solely on your application while the cloud provider manages the servers you need. This practical guide shows you step-by-step how to build and deploy complex applications in a flexible multicloud, multilanguage envi...
Learning Apache OpenWhisk. Developing Open Serverless Solutions Learning Apache OpenWhisk. Developing Open Serverless Solutions
(0,00 zł najniższa cena z 30 dni)237.15 zł
279.00 zł(-15%) -
More and more data-driven companies are looking to adopt stream processing and streaming analytics. With this concise ebook, you’ll learn best practices for designing a reliable architecture that supports this emerging big-data paradigm.Authors Ted Dunning and Ellen Friedman (Real World Had...
Streaming Architecture. New Designs Using Apache Kafka and MapR Streams Streaming Architecture. New Designs Using Apache Kafka and MapR Streams
(0,00 zł najniższa cena z 30 dni)84.92 zł
99.90 zł(-15%) -
Get a solid grounding in Apache Oozie, the workflow scheduler system for managing Hadoop jobs. With this hands-on guide, two experienced Hadoop practitioners walk you through the intricacies of this powerful and flexible platform, with numerous examples and real-world use cases.Once you set up yo...(0,00 zł najniższa cena z 30 dni)
135.15 zł
159.00 zł(-15%)
O autorach książki
3 Jules S. Damji, Brooke Wenig, Tathagata DasJules S. Damji - jest inżynierem oprogramowania dla wielu wiodących firm, takich jak Netscape, Sun Microsystems, Verisign i ProQuest. Zajmuje się systemami rozproszonymi.
Brooke Wenig - kieruje zespołem, który opracowuje potoki uczenia maszynowego. Prowadzi też szkolenia z zakresu rozproszonego uczenia maszynowego.
Tathagata Das - jest członkiem Apache Spark Project Management Committee. Pracuje nad strumieniowaniem strukturalnym i Delta Lake.
Ebooka przeczytasz na:
-
czytnikach Inkbook, Kindle, Pocketbook i innych
-
systemach Windows, MacOS i innych
-
systemach Windows, Android, iOS, HarmonyOS
-
na dowolnych urządzeniach i aplikacjach obsługujących formaty: PDF, EPub, Mobi
Masz pytania? Zajrzyj do zakładki Pomoc »
Audiobooka posłuchasz:
-
w aplikacji Ebookpoint na Android, iOS, HarmonyOs
-
na systemach Windows, MacOS i innych
-
na dowolonych urządzeniach i aplikacjach obsługujących format MP3 (pliki spakowane w ZIP)
Masz pytania? Zajrzyj do zakładki Pomoc »
Kurs Video zobaczysz:
-
w aplikacji Ebookpoint na Android, iOS, HarmonyOs
-
na systemach Windows, MacOS i innych
-
na dowolonych urządzeniach i aplikacjach obsługujących format MP4 (pliki spakowane w ZIP)
Szczegóły książki
- ISBN Ebooka:
- 978-14-920-4999-9, 9781492049999
- Data wydania ebooka:
-
2020-07-16
Data wydania ebooka często jest dniem wprowadzenia tytułu do sprzedaży i może nie być równoznaczna z datą wydania książki papierowej. Dodatkowe informacje możesz znaleźć w darmowym fragmencie. Jeśli masz wątpliwości skontaktuj się z nami sklep@helion.pl.
- Język publikacji:
- angielski
- Rozmiar pliku ePub:
- 13.7MB
- Rozmiar pliku Mobi:
- 35.2MB
- Kategorie:
Serwery internetowe » Apache
Spis treści książki
- Foreword
- Preface
- Who This Book Is For
- How the Book Is Organized
- How to Use the Code Examples
- Software and Configuration Used
- Conventions Used in This Book
- Using Code Examples
- OReilly Online Learning
- How to Contact Us
- Acknowledgments
- 1. Introduction to Apache Spark: A Unified Analytics Engine
- The Genesis of Spark
- Big Data and Distributed Computing at Google
- Hadoop at Yahoo!
- Sparks Early Years at AMPLab
- The Genesis of Spark
- What Is Apache Spark?
- Speed
- Ease of Use
- Modularity
- Extensibility
- Unified Analytics
- Apache Spark Components as a Unified Stack
- Spark SQL
- Spark MLlib
- Spark Structured Streaming
- GraphX
- Apache Spark Components as a Unified Stack
- Apache Sparks Distributed Execution
- Spark driver
- SparkSession
- Cluster manager
- Spark executor
- Deployment modes
- Distributed data and partitions
- The Developers Experience
- Who Uses Spark, and for What?
- Data science tasks
- Data engineering tasks
- Popular Spark use cases
- Who Uses Spark, and for What?
- Community Adoption and Expansion
- 2. Downloading Apache Spark and Getting Started
- Step 1: Downloading Apache Spark
- Sparks Directories and Files
- Step 1: Downloading Apache Spark
- Step 2: Using the Scala or PySpark Shell
- Using the Local Machine
- Step 3: Understanding Spark Application Concepts
- Spark Application and SparkSession
- Spark Jobs
- Spark Stages
- Spark Tasks
- Transformations, Actions, and Lazy Evaluation
- Narrow and Wide Transformations
- The Spark UI
- Your First Standalone Application
- Counting M&Ms for the Cookie Monster
- Building Standalone Applications in Scala
- Summary
- 3. Apache Sparks Structured APIs
- Spark: Whats Underneath an RDD?
- Structuring Spark
- Key Merits and Benefits
- The DataFrame API
- Sparks Basic Data Types
- Sparks Structured and Complex Data Types
- Schemas and Creating DataFrames
- Two ways to define a schema
- Columns and Expressions
- Rows
- Common DataFrame Operations
- Using DataFrameReader and DataFrameWriter
- Saving a DataFrame as a Parquet file or SQL table
- Using DataFrameReader and DataFrameWriter
- Transformations and actions
- Projections and filters
- Renaming, adding, and dropping columns
- Aggregations
- Other common DataFrame operations
- End-to-End DataFrame Example
- The Dataset API
- Typed Objects, Untyped Objects, and Generic Rows
- Creating Datasets
- Scala: Case classes
- Dataset Operations
- End-to-End Dataset Example
- DataFrames Versus Datasets
- When to Use RDDs
- Spark SQL and the Underlying Engine
- The Catalyst Optimizer
- Phase 1: Analysis
- Phase 2: Logical optimization
- Phase 3: Physical planning
- Phase 4: Code generation
- The Catalyst Optimizer
- Summary
- 4. Spark SQL and DataFrames: Introduction to Built-in Data Sources
- Using Spark SQL in Spark Applications
- Basic Query Examples
- Using Spark SQL in Spark Applications
- SQL Tables and Views
- Managed Versus UnmanagedTables
- Creating SQL Databases and Tables
- Creating a managed table
- Creating an unmanaged table
- Creating Views
- Temporary views versus global temporary views
- Viewing the Metadata
- Caching SQL Tables
- Reading Tables into DataFrames
- Data Sources for DataFrames and SQL Tables
- DataFrameReader
- DataFrameWriter
- Parquet
- Reading Parquet files into a DataFrame
- Reading Parquet files into a Spark SQL table
- Writing DataFrames to Parquet files
- Writing DataFrames to Spark SQL tables
- JSON
- Reading a JSON file into a DataFrame
- Reading a JSON file into a Spark SQL table
- Writing DataFrames to JSON files
- JSON data source options
- CSV
- Reading a CSV file into a DataFrame
- Reading a CSV file into a Spark SQL table
- Writing DataFrames to CSV files
- CSV data source options
- Avro
- Reading an Avro file into a DataFrame
- Reading an Avro file into a Spark SQL table
- Writing DataFrames to Avro files
- Avro data source options
- ORC
- Reading an ORC file into a DataFrame
- Reading an ORC file into a Spark SQL table
- Writing DataFrames to ORC files
- Images
- Reading an image file into a DataFrame
- Binary Files
- Reading a binary file into a DataFrame
- Summary
- 5. Spark SQL and DataFrames: Interacting with External Data Sources
- Spark SQL and Apache Hive
- User-Defined Functions
- Spark SQL UDFs
- Evaluation order and null checking in Spark SQL
- Speeding up and distributing PySpark UDFs with Pandas UDFs
- User-Defined Functions
- Spark SQL and Apache Hive
- Querying with the Spark SQL Shell, Beeline, and Tableau
- Using the Spark SQL Shell
- Create a table
- Insert data into the table
- Running a Spark SQL query
- Using the Spark SQL Shell
- Working with Beeline
- Start the Thrift server
- Connect to the Thrift server via Beeline
- Execute a Spark SQL query with Beeline
- Stop the Thrift server
- Working with Tableau
- Start the Thrift server
- Start Tableau
- Stop the Thrift server
- External Data Sources
- JDBC and SQL Databases
- The importance of partitioning
- JDBC and SQL Databases
- PostgreSQL
- MySQL
- Azure Cosmos DB
- MS SQL Server
- Other External Sources
- Higher-Order Functions in DataFrames and Spark SQL
- Option 1: Explode and Collect
- Option 2: User-Defined Function
- Built-in Functions for Complex Data Types
- Higher-Order Functions
- transform()
- filter()
- exists()
- reduce()
- Common DataFrames and Spark SQL Operations
- Unions
- Joins
- Windowing
- Modifications
- Adding new columns
- Dropping columns
- Renaming columns
- Pivoting
- Summary
- 6. Spark SQL and Datasets
- Single API for Java and Scala
- Scala Case Classes and JavaBeans for Datasets
- Single API for Java and Scala
- Working with Datasets
- Creating Sample Data
- Transforming Sample Data
- Higher-order functions and functional programming
- Converting DataFrames to Datasets
- Memory Management for Datasets and DataFrames
- Dataset Encoders
- Sparks Internal Format Versus Java Object Format
- Serialization and Deserialization (SerDe)
- Costs of Using Datasets
- Strategies to Mitigate Costs
- Summary
- 7. Optimizing and Tuning Spark Applications
- Optimizing and Tuning Spark for Efficiency
- Viewing and Setting Apache Spark Configurations
- Scaling Spark for Large Workloads
- Static versus dynamic resource allocation
- Configuring Spark executors memory and the shuffle service
- Maximizing Spark parallelism
- How partitions are created
- Optimizing and Tuning Spark for Efficiency
- Caching and Persistence of Data
- DataFrame.cache()
- DataFrame.persist()
- When to Cache and Persist
- When Not to Cache and Persist
- A Family of Spark Joins
- Broadcast Hash Join
- When to use a broadcast hash join
- Broadcast Hash Join
- Shuffle Sort Merge Join
- Optimizing the shuffle sort merge join
- When to use a shuffle sort merge join
- Inspecting the Spark UI
- Journey Through the Spark UI Tabs
- Jobs and Stages
- Executors
- Storage
- SQL
- Environment
- Debugging Spark applications
- Journey Through the Spark UI Tabs
- Summary
- 8. Structured Streaming
- Evolution of the Apache Spark Stream Processing Engine
- The Advent of Micro-Batch Stream Processing
- Lessons Learned from Spark Streaming (DStreams)
- The Philosophy of Structured Streaming
- Evolution of the Apache Spark Stream Processing Engine
- The Programming Model of Structured Streaming
- The Fundamentals of a Structured Streaming Query
- Five Steps to Define a Streaming Query
- Step 1: Define input sources
- Step 2: Transform data
- Step 3: Define output sink and output mode
- Step 4: Specify processing details
- Step 5: Start the query
- Putting it all together
- Five Steps to Define a Streaming Query
- Under the Hood of an Active Streaming Query
- Recovering from Failures with Exactly-Once Guarantees
- Monitoring an Active Query
- Querying current status using StreamingQuery
- Get current metrics using StreamingQuery
- Get current status using StreamingQuery.status()
- Querying current status using StreamingQuery
- Publishing metrics using Dropwizard Metrics
- Publishing metrics using custom StreamingQueryListeners
- Streaming Data Sources and Sinks
- Files
- Reading from files
- Writing to files
- Files
- Apache Kafka
- Reading from Kafka
- Writing to Kafka
- Custom Streaming Sources and Sinks
- Writing to any storage system
- Using foreachBatch()
- Using foreach()
- Writing to any storage system
- Reading from any storage system
- Data Transformations
- Incremental Execution and Streaming State
- Stateless Transformations
- Stateful Transformations
- Distributed and fault-tolerant state management
- Types of stateful operations
- Stateful Streaming Aggregations
- Aggregations Not Based on Time
- Aggregations with Event-Time Windows
- Handling late data with watermarks
- Semantic guarantees with watermarks
- Handling late data with watermarks
- Supported output modes
- Streaming Joins
- StreamStatic Joins
- StreamStream Joins
- Inner joins with optional watermarking
- Outer joins with watermarking
- Arbitrary Stateful Computations
- Modeling Arbitrary Stateful Operations with mapGroupsWithState()
- Using Timeouts to Manage Inactive Groups
- Processing-time timeouts
- Event-time timeouts
- Generalization with flatMapGroupsWithState()
- Performance Tuning
- Summary
- 9. Building Reliable Data Lakes with Apache Spark
- The Importance of an Optimal Storage Solution
- Databases
- A Brief Introduction to Databases
- Reading from and Writing to Databases Using Apache Spark
- Limitations of Databases
- Data Lakes
- A Brief Introduction to Data Lakes
- Reading from and Writing to Data Lakes using Apache Spark
- Limitations of Data Lakes
- Lakehouses: The Next Step in the Evolution of Storage Solutions
- Apache Hudi
- Apache Iceberg
- Delta Lake
- Building Lakehouses with Apache Spark and Delta Lake
- Configuring Apache Spark with Delta Lake
- Loading Data into a Delta Lake Table
- Loading Data Streams into a Delta Lake Table
- Enforcing Schema on Write to Prevent Data Corruption
- Evolving Schemas to Accommodate Changing Data
- Transforming Existing Data
- Updating data to fix errors
- Deleting user-related data
- Upserting change data to a table using merge()
- Deduplicating data while inserting using insert-only merge
- Auditing Data Changes with Operation History
- Querying Previous Snapshots of a Table with Time Travel
- Summary
- 10. Machine Learning with MLlib
- What Is Machine Learning?
- Supervised Learning
- Unsupervised Learning
- Why Spark for Machine Learning?
- What Is Machine Learning?
- Designing Machine Learning Pipelines
- Data Ingestion and Exploration
- Creating Training and Test Data Sets
- Preparing Features with Transformers
- Understanding Linear Regression
- Using Estimators to Build Models
- Creating a Pipeline
- One-hot encoding
- Evaluating Models
- RMSE
- Interpreting the value of RMSE
- R2
- RMSE
- Saving and Loading Models
- Hyperparameter Tuning
- Tree-Based Models
- Decision trees
- Random forests
- Tree-Based Models
- k-Fold Cross-Validation
- Optimizing Pipelines
- Summary
- 11. Managing, Deploying, and Scaling Machine Learning Pipelines with Apache Spark
- Model Management
- MLflow
- Tracking
- MLflow
- Model Management
- Model Deployment Options with MLlib
- Batch
- Streaming
- Model Export Patterns for Real-Time Inference
- Leveraging Spark for Non-MLlib Models
- Pandas UDFs
- Spark for Distributed Hyperparameter Tuning
- Joblib
- Hyperopt
- Summary
- 12. Epilogue: Apache Spark 3.0
- Spark Core and Spark SQL
- Dynamic Partition Pruning
- Adaptive Query Execution
- The AQE framework
- SQL Join Hints
- Shuffle sort merge join (SMJ)
- Broadcast hash join (BHJ)
- Shuffle hash join (SHJ)
- Shuffle-and-replicate nested loop join (SNLJ)
- Spark Core and Spark SQL
- Catalog Plugin API and DataSourceV2
- Accelerator-Aware Scheduler
- Structured Streaming
- PySpark, Pandas UDFs, and Pandas Function APIs
- Redesigned Pandas UDFs with Python Type Hints
- Iterator Support in Pandas UDFs
- New Pandas Function APIs
- Changed Functionality
- Languages Supported and Deprecated
- Changes to the DataFrame and Dataset APIs
- DataFrame and SQL Explain Commands
- Summary
- Index
O'Reilly Media - inne książki
-
FinOps brings financial accountability to the variable spend model of cloud. Used by the majority of global enterprises, this management practice has grown from a fringe activity to the de facto discipline managing cloud spend. In this book, authors J.R. Storment and Mike Fuller outline the proce...(0,00 zł najniższa cena z 30 dni)
262.65 zł
309.00 zł(-15%) -
Edge AI is transforming the way computers interact with the real world, allowing IoT devices to make decisions using the 99% of sensor data that was previously discarded due to cost, bandwidth, or power limitations. With techniques like embedded machine learning, developers can capture human intu...(0,00 zł najniższa cena z 30 dni)
262.65 zł
309.00 zł(-15%) -
Why is it difficult for so many companies to get digital identity right? If you're still wrestling with even simple identity problems like modern website authentication, this practical book has the answers you need. Author Phil Windley provides conceptual frameworks to help you make sense of all ...(0,00 zł najniższa cena z 30 dni)
186.15 zł
219.00 zł(-15%) -
Python was recently ranked as today's most popular programming language on the TIOBE index, thanks to its broad applicability to design and prototyping to testing, deployment, and maintenance. With this updated fourth edition, you'll learn how to get the most out of Python, whether you're a profe...(0,00 zł najniższa cena z 30 dni)
305.15 zł
359.00 zł(-15%) -
With the accelerating speed of business and the increasing dependence on technology, companies today are significantly changing the way they build in-house business solutions. Many now use low-code and no code technologies to help them deal with specific issues, but that's just the beginning. Wit...
Building Solutions with the Microsoft Power Platform Building Solutions with the Microsoft Power Platform
(0,00 zł najniższa cena z 30 dni)262.65 zł
309.00 zł(-15%) -
Companies are scrambling to integrate AI into their systems and operations. But to build truly successful solutions, you need a firm grasp of the underlying mathematics. This accessible guide walks you through the math necessary to thrive in the AI field such as focusing on real-world application...(0,00 zł najniższa cena z 30 dni)
262.65 zł
309.00 zł(-15%) -
DevOps engineers, developers, and security engineers have ever-changing roles to play in today's cloud native world. In order to build secure and resilient applications, you have to be equipped with security knowledge. Enter security as code.In this book, authors BK Sarthak Das and Virginia Chu d...(0,00 zł najniższa cena z 30 dni)
186.15 zł
219.00 zł(-15%) -
With the increasing use of AI in high-stakes domains such as medicine, law, and defense, organizations spend a lot of time and money to make ML models trustworthy. Many books on the subject offer deep dives into theories and concepts. This guide provides a practical starting point to help develop...(0,00 zł najniższa cena z 30 dni)
262.65 zł
309.00 zł(-15%) -
Why are so many companies adopting GitOps for their DevOps and cloud native strategy? This reliable framework is quickly becoming the standard method for deploying apps to Kubernetes. With this practical, developer-oriented book, DevOps engineers, developers, IT architects, and SREs will learn th...(0,00 zł najniższa cena z 30 dni)
262.65 zł
309.00 zł(-15%) -
Learn the essentials of working with Flutter and Dart to build full stack applications that meet the needs of a cloud-driven world. Together, the Flutter open source UI software development kit and the Dart programming language for client development provide a unified solution to building applica...(0,00 zł najniższa cena z 30 dni)
220.15 zł
259.00 zł(-15%)
Dzieki opcji "Druk na żądanie" do sprzedaży wracają tytuły Grupy Helion, które cieszyły sie dużym zainteresowaniem, a których nakład został wyprzedany.
Dla naszych Czytelników wydrukowaliśmy dodatkową pulę egzemplarzy w technice druku cyfrowego.
Co powinieneś wiedzieć o usłudze "Druk na żądanie":
- usługa obejmuje tylko widoczną poniżej listę tytułów, którą na bieżąco aktualizujemy;
- cena książki może być wyższa od początkowej ceny detalicznej, co jest spowodowane kosztami druku cyfrowego (wyższymi niż koszty tradycyjnego druku offsetowego). Obowiązująca cena jest zawsze podawana na stronie WWW książki;
- zawartość książki wraz z dodatkami (płyta CD, DVD) odpowiada jej pierwotnemu wydaniu i jest w pełni komplementarna;
- usługa nie obejmuje książek w kolorze.
W przypadku usługi "Druk na żądanie" termin dostarczenia przesyłki może obejmować także czas potrzebny na dodruk (do 10 dni roboczych)
Masz pytanie o konkretny tytuł? Napisz do nas: sklep[at]helion.pl.
Książka, którą chcesz zamówić pochodzi z końcówki nakładu. Oznacza to, że mogą się pojawić drobne defekty (otarcia, rysy, zagięcia).
Co powinieneś wiedzieć o usłudze "Końcówka nakładu":
- usługa obejmuje tylko książki oznaczone tagiem "Końcówka nakładu";
- wady o których mowa powyżej nie podlegają reklamacji;
Masz pytanie o konkretny tytuł? Napisz do nas: sklep[at]helion.pl.


Oceny i opinie klientów: Learning Spark. 2nd Edition Jules S. Damji, Brooke Wenig, Tathagata Das (0)
Weryfikacja opinii następuję na podstawie historii zamówień na koncie Użytkownika umieszczającego opinię. Użytkownik mógł otrzymać punkty za opublikowanie opinii uprawniające do uzyskania rabatu w ramach Programu Punktowego.