Although Spark was originally created in Scala, the Spark Community has published a new tool called PySpark, which allows Python to be used with Spark. Is a PhD visitor considered as a visiting scholar? Here, the printSchema() method gives you a database schema without column names-, Use the toDF() function with column names as parameters to pass column names to the DataFrame, as shown below.-, The above code snippet gives you the database schema with the column names-, Upskill yourself for your dream job with industry-level big data projects with source code. Spark mailing list about other tuning best practices. value of the JVMs NewRatio parameter. Even with Arrow, toPandas() results in the collection of all records in the DataFrame to the driver program and should be done on a small subset of the data. Joins in PySpark are used to join two DataFrames together, and by linking them together, one may join several DataFrames. the RDD persistence API, such as MEMORY_ONLY_SER. One of the examples of giants embracing PySpark is Trivago. During the development phase, the team agreed on a blend of PyCharm for developing code and Jupyter for interactively running the code. Lastly, this approach provides reasonable out-of-the-box performance for a Is it suspicious or odd to stand by the gate of a GA airport watching the planes? The point is if you have 9 executors with 10 nodes and 40GB ram, assuming 1 executor will be on 1 node then still u have 1 node which is idle (memory is underutilized). Q9. Furthermore, it can write data to filesystems, databases, and live dashboards. What do you mean by joins in PySpark DataFrame? A streaming application must be available 24 hours a day, seven days a week, and must be resistant to errors external to the application code (e.g., system failures, JVM crashes, etc.). List a few attributes of SparkConf. The StructType() accepts a list of StructFields, each of which takes a fieldname and a value type. There is no better way to learn all of the necessary big data skills for the job than to do it yourself. controlled via spark.hadoop.mapreduce.input.fileinputformat.list-status.num-threads (currently default is 1). List some recommended practices for making your PySpark data science workflows better. Serialization plays an important role in the performance of any distributed application. spark = SparkSession.builder.appName('ProjectPro).getOrCreate(), column= ["employee_name", "department", "salary"], df = spark.createDataFrame(data = data, schema = column). But when do you know when youve found everything you NEED? All depends of partitioning of the input table. Several stateful computations combining data from different batches require this type of checkpoint. Because of their immutable nature, we can't change tuples. This is eventually reduced down to merely the initial login record per user, which is then sent to the console. Not the answer you're looking for? Which aspect is the most difficult to alter, and how would you go about doing so? registration options, such as adding custom serialization code. Spark builds its scheduling around map(e => (e.pageId, e)) . What are the different ways to handle row duplication in a PySpark DataFrame? Site design / logo 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA. DDR3 vs DDR4, latency, SSD vd HDD among other things. We can also apply single and multiple conditions on DataFrame columns using the where() method. Comparable Interface in Java with Examples, Best Way to Master Spring Boot A Complete Roadmap. As an example, if your task is reading data from HDFS, the amount of memory used by the task can be estimated using According to the Businesswire report, the worldwide big data as a service market is estimated to grow at a CAGR of 36.9% from 2019 to 2026, reaching $61.42 billion by 2026. If an object is old The nature of simulating nature: A Q&A with IBM Quantum researcher Dr. Jamie We've added a "Necessary cookies only" option to the cookie consent popup. It only takes a minute to sign up. }, available in SparkContext can greatly reduce the size of each serialized task, and the cost Furthermore, PySpark aids us in working with RDDs in the Python programming language. Many JVMs default this to 2, meaning that the Old generation How to Sort Golang Map By Keys or Values? standard Java or Scala collection classes (e.g. toPandas() gathers all records in a PySpark DataFrame and delivers them to the driver software; it should only be used on a short percentage of the data. from pyspark.sql import Sparksession, types, spark = Sparksession.builder.master("local").appliame("scenario based")\, df_imput=df.filter(df['value'] l= header).rdd.map(lambda x: x[0]. the size of the data block read from HDFS. The RDD transformation may be created using the pipe() function, and it can be used to read each element of the RDD as a String. "https://daxg39y63pxwu.cloudfront.net/images/blog/pyspark-interview-questions-and-answers/image_35917468101637557515487.png", with -XX:G1HeapRegionSize. See the discussion of advanced GC Q2. Apache Arrow is an in-memory columnar data format used in Apache Spark to efficiently transfer data between JVM and Python processes. Is there a single-word adjective for "having exceptionally strong moral principles"? It has the best encoding component and, unlike information edges, it enables time security in an organized manner. The simplest fix here is to Euler: A baby on his lap, a cat on his back thats how he wrote his immortal works (origin?). PySpark is Python API for Spark. You can write it as a csv and it will be available to open in excel: Thanks for contributing an answer to Stack Overflow! Consider adding another column to a dataframe that may be used as a filter instead of utilizing keys to index entries in a dictionary. The core engine for large-scale distributed and parallel data processing is SparkCore. The best way to get the ball rolling is with a no obligation, completely free consultation without a harassing bunch of follow up calls, emails and stalking. I'm finding so many difficulties related to performances and methods. Short story taking place on a toroidal planet or moon involving flying. Speed of processing has more to do with the CPU and RAM speed i.e. "name": "ProjectPro" config. Cluster mode should be utilized for deployment if the client computers are not near the cluster. sc.textFile(hdfs://Hadoop/user/test_file.txt); Write a function that converts each line into a single word: Run the toWords function on each member of the RDD in Spark:words = line.flatMap(toWords); Spark Streaming is a feature of the core Spark API that allows for scalable, high-throughput, and fault-tolerant live data stream processing. Since RDD doesnt have columns, the DataFrame is created with default column names _1 and _2 as we have two columns. Resilient Distribution Datasets (RDD) are a collection of fault-tolerant functional units that may run simultaneously. In general, profilers are calculated using the minimum and maximum values of each column. There will be no network latency concerns because the computer is part of the cluster, and the cluster's maintenance is already taken care of, so there is no need to be concerned in the event of a failure. Py4J is a necessary module for the PySpark application to execute, and it may be found in the $SPARK_HOME/python/lib/py4j-*-src.zip directory. WebWhen we build a DataFrame from a file or table, PySpark creates the DataFrame in memory with a specific number of divisions based on specified criteria. in the AllScalaRegistrar from the Twitter chill library. Scala is the programming language used by Apache Spark. First, we need to create a sample dataframe. Q5. The following will be the yielded output-, def calculate(sparkSession: SparkSession): Unit = {, val userRdd: DataFrame = readUserData(sparkSession), val userActivityRdd: DataFrame = readUserActivityData(sparkSession), .withColumnRenamed("count", CountColName). Hadoop datasets- Those datasets that apply a function to each file record in the Hadoop Distributed File System (HDFS) or another file storage system. How to slice a PySpark dataframe in two row-wise dataframe? ('James',{'hair':'black','eye':'brown'}). How do you use the TCP/IP Protocol to stream data. What is the best way to learn PySpark? What do you mean by checkpointing in PySpark? You found me for a reason. and chain with toDF() to specify names to the columns. Catalyst optimizer also handles various Big data challenges like semistructured data and advanced analytics. Future plans, financial benefits and timing can be huge factors in approach. size of the block. Many sales people will tell you what you want to hear and hope that you arent going to ask them to prove it. Apart from this, Runtastic also relies upon PySpark for their Big Data sanity checks. by any resource in the cluster: CPU, network bandwidth, or memory. The join() procedure accepts the following parameters and returns a DataFrame-, how: default inner (Options are inner, cross, outer, full, full outer, left, left outer, right, right outer, left semi, and left anti.). Total Memory Usage of Pandas Dataframe with info () We can use Pandas info () function to find the total memory usage of a dataframe. Py4J is a Java library integrated into PySpark that allows Python to actively communicate with JVM instances. WebProbably even three copies: your original data, the pyspark copy, and then the Spark copy in the JVM. Q4. You can delete the temporary table by ending the SparkSession. Even if the rows are limited, the number of columns and the content of each cell also matters. before a task completes, it means that there isnt enough memory available for executing tasks. You have to start by creating a PySpark DataFrame first. The following methods should be defined or inherited for a custom profiler-. Monitor how the frequency and time taken by garbage collection changes with the new settings. The nature of simulating nature: A Q&A with IBM Quantum researcher Dr. Jamie We've added a "Necessary cookies only" option to the cookie consent popup, Pyspark: Filter dataframe based on separate specific conditions. Write code to create SparkSession in PySpark, Q7. valueType should extend the DataType class in PySpark. The partition of a data stream's contents into batches of X seconds, known as DStreams, is the basis of. objects than to slow down task execution. The data is stored in HDFS (Hadoop Distributed File System), which takes a long time to retrieve. Q6.What do you understand by Lineage Graph in PySpark? But, you must gain some hands-on experience by working on real-world projects available on GitHub, Kaggle, ProjectPro, etc. Our experience suggests that the effect of GC tuning depends on your application and the amount of memory available. Through the use of Streaming and Kafka, PySpark is also utilized to process real-time data. Please Also the last thing which I tried is to execute the steps manually on the. Apart from this, Runtastic also relies upon PySpark for their, If you are interested in landing a big data or, Top 50 PySpark Interview Questions and Answers, We are here to present you the top 50 PySpark Interview Questions and Answers for both freshers and experienced professionals to help you attain your goal of becoming a PySpark. Q8. Q4. bytes, will greatly slow down the computation. PySpark is a Python Spark library for running Python applications with Apache Spark features. We highly recommend using Kryo if you want to cache data in serialized form, as It is lightning fast technology that is designed for fast computation. If there are just a few zero values, dense vectors should be used instead of sparse vectors, as sparse vectors would create indexing overhead, which might affect performance. (They are given in this case from a constant inline data structure that is transformed to a distributed dataset using parallelize.) 1GB to 100 GB. Consider using numeric IDs or enumeration objects instead of strings for keys. lines = sc.textFile(hdfs://Hadoop/user/test_file.txt); Important: Instead of using sparkContext(sc), use sparkSession (spark). There are two options: a) wait until a busy CPU frees up to start a task on data on the same It entails data ingestion from various sources, including Kafka, Kinesis, TCP connections, and data processing with complicated algorithms using high-level functions like map, reduce, join, and window. As per the documentation : The best way to size the amount of memory consumption a dataset will require is to create an RDD, put it into cache, an But if code and data are separated, For Spark SQL with file-based data sources, you can tune spark.sql.sources.parallelPartitionDiscovery.threshold and If you want a greater level of type safety at compile-time, or if you want typed JVM objects, Dataset is the way to go. overhead of garbage collection (if you have high turnover in terms of objects). increase the level of parallelism, so that each tasks input set is smaller. When Java needs to evict old objects to make room for new ones, it will Q3. Create PySpark DataFrame from list of tuples, Extract First and last N rows from PySpark DataFrame. PySpark-based programs are 100 times quicker than traditional apps. Parallelized Collections- Existing RDDs that operate in parallel with each other. createDataFrame() has another signature in PySpark which takes the collection of Row type and schema for column names as arguments. Yes, PySpark is a faster and more efficient Big Data tool. Data checkpointing: Because some of the stateful operations demand it, we save the RDD to secure storage. hey, added can you please check and give me any idea? PySpark allows you to create applications using Python APIs. Refresh the page, check Medium s site status, or find something interesting to read. Syntax dataframe .memory_usage (index, deep) Parameters The parameters are keyword arguments. while storage memory refers to that used for caching and propagating internal data across the df1.cache() does not initiate the caching operation on DataFrame df1. Linear regulator thermal information missing in datasheet. Summary cache () is an Apache Spark transformation that can be used on a DataFrame, Dataset, or RDD when you want to perform more than one action. You'll need to transfer the data back to Pandas DataFrame after processing it in PySpark so that you can use it in Machine Learning apps or other Python programs. Datasets are a highly typed collection of domain-specific objects that may be used to execute concurrent calculations. A DataFrame is an immutable distributed columnar data collection. So use min_df=10 and max_df=1000 or so. Hi and thanks for your answer! Apache Mesos- Mesos is a cluster manager that can also run Hadoop MapReduce and PySpark applications. Spark automatically saves intermediate data from various shuffle processes. This means lowering -Xmn if youve set it as above. Are you using Data Factory? comfortably within the JVMs old or tenured generation. To subscribe to this RSS feed, copy and paste this URL into your RSS reader. No. lines = sparkContext.textFile(sample_file.txt); Spark executors have the same fixed core count and heap size as the applications created in Spark. The following example is to know how to filter Dataframe using the where() method with Column condition. [EDIT 2]: They are, however, able to do this only through the use of Py4j. Execution may evict storage Q10. Q11. Q10. Their team uses Python's unittest package and develops a task for each entity type to keep things simple and manageable (e.g., sports activities). map(mapDateTime2Date) . Vertex, and Edge objects are supplied to the Graph object as RDDs of type RDD[VertexId, VT] and RDD[Edge[ET]] respectively (where VT and ET are any user-defined types associated with a given Vertex or Edge). What am I doing wrong here in the PlotLegends specification? I've found a solution to the problem with the pyexcelerate package: In this way Databricks succeed in elaborating a 160MB dataset and exporting to Excel in 3 minutes. What are workers, executors, cores in Spark Standalone cluster? By using our site, you By clicking Accept all cookies, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy. To execute the PySpark application after installing Spark, set the Py4j module to the PYTHONPATH environment variable. When a Python object may be edited, it is considered to be a mutable data type. and calling conf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer"). "https://daxg39y63pxwu.cloudfront.net/images/blog/pyspark-interview-questions-and-answers/image_462594608141637557515513.png", Q12. In the worst case, the data is transformed into a dense format when doing so, Get a list from Pandas DataFrame column headers, Write DataFrame from Databricks to Data Lake, Azure Data Explorer (ADX) vs Polybase vs Databricks, DBFS AZURE Databricks -difference in filestore and DBFS, Azure Databricks with Storage Account as data layer, Azure Databricks integration with Unix File systems. Q4. A simplified description of the garbage collection procedure: When Eden is full, a minor GC is run on Eden and objects By using the, I also followed the best practices blog Debuggerrr mentioned in his answer and calculated the correct executor memory, number of executors etc. Why did Ukraine abstain from the UNHRC vote on China? PySpark runs a completely compatible Python instance on the Spark driver (where the task was launched) while maintaining access to the Scala-based Spark cluster access. I have a dataset that is around 190GB that was partitioned into 1000 partitions. My clients come from a diverse background, some are new to the process and others are well seasoned. What do you understand by errors and exceptions in Python? df = spark.createDataFrame(data=data,schema=column). By passing the function to PySpark SQL udf(), we can convert the convertCase() function to UDF(). Broadening your expertise while focusing on an advanced understanding of certain technologies or languages is a good idea. (Continuing comment from above) For point no.7, I tested my code on a very small subset in jupiterlab notebook, and it works fine. More info about Internet Explorer and Microsoft Edge. sc.textFile(hdfs://Hadoop/user/sample_file.txt); 2. What is SparkConf in PySpark? I had a large data frame that I was re-using after doing many Q11. If your objects are large, you may also need to increase the spark.kryoserializer.buffer Subset or Filter data with multiple conditions in PySpark, Spatial Filters - Averaging filter and Median filter in Image Processing. Q7. When we build a DataFrame from a file or table, PySpark creates the DataFrame in memory with a specific number of divisions based on specified criteria. Databricks 2023. When there are just a few non-zero values, sparse vectors come in handy. In the previous article, we covered | by Aruna Singh | DataDrivenInvestor Write Sign up Sign In 500 Apologies, but something went wrong on our end. Using the Arrow optimizations produces the same results as when Arrow is not enabled. "https://daxg39y63pxwu.cloudfront.net/images/blog/pyspark-interview-questions-and-answers/image_104852183111637557515494.png", "url": "https://dezyre.gumlet.io/images/homepage/ProjectPro_Logo.webp" "logo": { otherwise the process could take a very long time, especially when against object store like S3. data = [("James","","William","36636","M",3000), StructField("firstname",StringType(),True), \, StructField("middlename",StringType(),True), \, StructField("lastname",StringType(),True), \, StructField("gender", StringType(), True), \, StructField("salary", IntegerType(), True) \, df = spark.createDataFrame(data=data,schema=schema). What will you do with such data, and how will you import them into a Spark Dataframe? Build an Awesome Job Winning Project Portfolio with Solved. Join the two dataframes using code and count the number of events per uName. Metadata checkpointing: Metadata rmeans information about information. acknowledge that you have read and understood our, Data Structure & Algorithm Classes (Live), Data Structure & Algorithm-Self Paced(C++/JAVA), Android App Development with Kotlin(Live), Full Stack Development with React & Node JS(Live), GATE CS Original Papers and Official Keys, ISRO CS Original Papers and Official Keys, ISRO CS Syllabus for Scientist/Engineer Exam, Java Developer Learning Path A Complete Roadmap. amount of space needed to run the task) and the RDDs cached on your nodes. In case of Client mode, if the machine goes offline, the entire operation is lost. "https://daxg39y63pxwu.cloudfront.net/images/blog/pyspark-interview-questions-and-answers/blobid0.png", Whats the grammar of "For those whose stories they are"? Checkpointing can be of two types- Metadata checkpointing and Data checkpointing. Is it correct to use "the" before "materials used in making buildings are"? You should not convert a big spark dataframe to pandas because you probably will not be able to allocate so much memory. Q3. Please indicate which parts of the following code will run on the master and which parts will run on each worker node. These may be altered as needed, and the results can be presented as Strings. The Coalesce method is used to decrease the number of partitions in a Data Frame; The coalesce function avoids the full shuffling of data. PySpark can handle data from Hadoop HDFS, Amazon S3, and a variety of other file systems. How will you use PySpark to see if a specific keyword exists? Syntax errors are frequently referred to as parsing errors. Try to use the _to_java_object_rdd() function : import py4j.protocol is occupying. If so, how close was it? Spark saves data in memory (RAM), making data retrieval quicker and faster when needed. A lot of the answers to these kinds of issues that I found online say to increase the memoryOverhead. Assign too much, and it would hang up and fail to do anything else, really. Reading in CSVs, for example, is an eager activity, thus I stage the dataframe to S3 as Parquet before utilizing it in further pipeline steps. The following example is to know how to use where() method with SQL Expression. We write a Python function and wrap it in PySpark SQL udf() or register it as udf and use it on DataFrame and SQL, respectively, in the case of PySpark. StructType is represented as a pandas.DataFrame instead of pandas.Series. Ace Your Next Job Interview with Mock Interviews from Experts to Improve Your Skills and Boost Confidence! In this example, DataFrame df is cached into memory when take(5) is executed. PySpark Data Frame has the data into relational format with schema embedded in it just as table in RDBMS 3. PySpark tutorial provides basic and advanced concepts of Spark. What will trigger Databricks? This is beneficial to Python developers who work with pandas and NumPy data. rev2023.3.3.43278. "https://daxg39y63pxwu.cloudfront.net/images/blog/pyspark-interview-questions-and-answers/image_34219305481637557515476.png", spark.sql.sources.parallelPartitionDiscovery.parallelism to improve listing parallelism. The py4j module version changes depending on the PySpark version were using; to configure this version correctly, follow the steps below: export PYTHONPATH=${SPARK_HOME}/python/:$(echo ${SPARK_HOME}/python/lib/py4j-*-src.zip):${PYTHONPATH}, Use the pip show command to see the PySpark location's path- pip show pyspark, Use the environment variables listed below to fix the problem on Windows-, set SPARK_HOME=C:\apps\opt\spark-3.0.0-bin-hadoop2.7, set PYTHONPATH=%SPARK_HOME%/python;%SPARK_HOME%/python/lib/py4j-0.10.9-src.zip;%PYTHONPATH%. In this article, you will learn to create DataFrame by some of these methods with PySpark examples. Site design / logo 2023 Stack Exchange Inc; user contributions licensed under CC BY-SA. Doesn't analytically integrate sensibly let alone correctly, Batch split images vertically in half, sequentially numbering the output files. How can I solve it? How are stages split into tasks in Spark? Our PySpark tutorial is designed for beginners and professionals. the Young generation. I know that I can use instead Azure Functions or Kubernetes, but I started using DataBricks hoping that it was possible Hm.. it looks like you are reading the same file and saving to the same file. of executors in each node. You can try with 15, if you are not comfortable with 20. reduceByKey(_ + _) . Pyspark Dataframes to Pandas and ML Ops - Parallel Execution Hold? It should only output for users who have events in the format uName; totalEventCount. registration requirement, but we recommend trying it in any network-intensive application. Q8. What do you understand by PySpark Partition? resStr= resStr + x[0:1].upper() + x[1:len(x)] + " ". Suppose I have a csv file with 20k rows, which I import into Pandas dataframe. Q15. Sure, these days you can find anything you want online with just the click of a button. There is no better way to learn all of the necessary big data skills for the job than to do it yourself. It accepts two arguments: valueType and one optional argument valueContainsNull, which specifies whether a value can accept null and is set to True by default. or set the config property spark.default.parallelism to change the default. Q2. of cores/Concurrent Task, No. spark.locality parameters on the configuration page for details. format. It is inefficient when compared to alternative programming paradigms. WebDataFrame.memory_usage(index=True, deep=False) [source] Return the memory usage of each column in bytes. Only one partition of DataFrame df is cached in this case, because take(5) only processes 5 records. Upgrade to Microsoft Edge to take advantage of the latest features, security updates, and technical support. support tasks as short as 200 ms, because it reuses one executor JVM across many tasks and it has To get started, let's make a PySpark DataFrame. It should be large enough such that this fraction exceeds spark.memory.fraction. We can change this behavior by supplying schema, where we can specify a column name, data type, and nullable for each field/column. Q3. You should start by learning Python, SQL, and Apache Spark. But the problem is, where do you start? add- this is a command that allows us to add a profile to an existing accumulated profile. "@context": "https://schema.org", if necessary, but only until total storage memory usage falls under a certain threshold (R). Q6. By clicking Post Your Answer, you agree to our terms of service, privacy policy and cookie policy. In general, we recommend 2-3 tasks per CPU core in your cluster. WebIntroduction to PySpark Coalesce PySpark Coalesce is a function in PySpark that is used to work with the partition data in a PySpark Data Frame. To put it another way, it offers settings for running a Spark application. Finally, when Old is close to full, a full GC is invoked. Please refer PySpark Read CSV into DataFrame. "https://daxg39y63pxwu.cloudfront.net/images/blog/pyspark-interview-questions-and-answers/image_91049064841637557515444.png", If data and the code that you can use json() method of the DataFrameReader to read JSON file into DataFrame. My code is GPL licensed, can I issue a license to have my code be distributed in a specific MIT licensed project? How to upload image and Preview it using ReactJS ? You can check out these PySpark projects to gain some hands-on experience with your PySpark skills. In real-time mostly you create DataFrame from data source files like CSV, Text, JSON, XML e.t.c. The cache() function or the persist() method with proper persistence settings can be used to cache data. (though you can control it through optional parameters to SparkContext.textFile, etc), and for In How to render an array of objects in ReactJS ? DataFrames can process huge amounts of organized data (such as relational databases) and semi-structured data (JavaScript Object Notation or JSON). List some of the functions of SparkCore. Some of the disadvantages of using PySpark are-. The where() method is an alias for the filter() method. Is PySpark a Big Data tool? This configuration is enabled by default except for High Concurrency clusters as well as user isolation clusters in workspaces that are Unity Catalog enabled. Aruna Singh 64 Followers This level stores RDD as deserialized Java objects. In the GC stats that are printed, if the OldGen is close to being full, reduce the amount of Q4. situations where there is no unprocessed data on any idle executor, Spark switches to lower locality JVM garbage collection can be a problem when you have large churn in terms of the RDDs A function that converts each line into words: 3. The only reason Kryo is not the default is because of the custom "publisher": { It provides two serialization libraries: You can switch to using Kryo by initializing your job with a SparkConf We are here to present you the top 50 PySpark Interview Questions and Answers for both freshers and experienced professionals to help you attain your goal of becoming a PySpark Data Engineer or Data Scientist. pyspark.pandas.Dataframe is the suggested method by Databricks in order to work with Dataframes (it replaces koalas) but I can't find any solution to my problem, except converting the dataframe to a normal pandas one. For example, you might want to combine new user attributes with an existing graph or pull vertex properties from one graph into another. The code below generates the convertCase() method, which accepts a string parameter and turns every word's initial letter to a capital letter. WebSpark SQL can cache tables using an in-memory columnar format by calling spark.catalog.cacheTable("tableName") or dataFrame.cache(). The types of items in all ArrayType elements should be the same. An rdd contains many partitions, which may be distributed and it can spill files to disk. a jobs configuration. This is accomplished by using sc.addFile, where 'sc' stands for SparkContext. spark = SparkSession.builder.getOrCreate(), df = spark.sql('''select 'spark' as hello '''), Persisting (or caching) a dataset in memory is one of PySpark's most essential features.