cswork / libraryOpen practice workspace

Coding questions · Experian

Compare Spark RDDs, DataFrames, and SQL Performance Gains

This question evaluates understanding of Spark abstractions (RDDs, DataFrames, Spark SQL), lazy evaluation, memory management, query optimization, and developer ergonomics within the Data Manipulation (SQL/Python) domain of distributed data processing.

SparkJobs

+---------+---------+---------------------+----------+
| job_id  | user_id | submit_time         | status   |
+---------+---------+---------------------+----------+
| 1001    | 17      | 2023-10-01 10:15:00 | running  |
| 1002    | 21      | 2023-10-01 10:20:00 | failed   |
| 1003    | 17      | 2023-10-01 10:25:00 | success  |
| 1004    | 42      | 2023-10-01 10:30:00 | running  |
+---------+---------+---------------------+----------+
Scenario

Discussion of distributed data processing tools used on big-data projects.

Question

Compare Spark RDDs, DataFrames, and Spark SQL. What performance gains come from Spark’s lazy evaluation model? When would you choose each abstraction?

Hints

Highlight memory management, query optimization, and developer ergonomics.

Spark Job Counts and Submit-Time Range by Status

You are given SparkJobs, a table of submitted Spark jobs.

Return one row per job status with:

  • status
  • job_count: number of jobs in that status
  • first_submit_time: earliest submit_time, formatted as YYYY-MM-DD HH24:MI:SS
  • last_submit_time: latest submit_time, formatted as YYYY-MM-DD HH24:MI:SS

Order the result alphabetically by status.

Table SparkJobs

columntypeconstraints
job_idINTEGERPRIMARY KEY, NOT NULL
user_idINTEGERNOT NULL
submit_timeTIMESTAMPNOT NULL
statusVARCHAR(10)NOT NULL

Sample data:

job_idstatussubmit_timeuser_id
1001running2023-10-01 10:15:0017
1002failed2023-10-01 10:20:0021
1003success2023-10-01 10:25:0017
1004running2023-10-01 10:30:0042

Expected output

One row per status with job count and formatted earliest/latest submission times.

first_submit_timejob_countlast_submit_timestatus
2023-10-01 10:20:0012023-10-01 10:20:00failed
2023-10-01 10:15:0022023-10-01 10:30:00running
2023-10-01 10:25:0012023-10-01 10:25:00success

Hints

  1. Group by status.
  2. Use COUNT(*), MIN(submit_time), and MAX(submit_time).
  3. Use TO_CHAR for PostgreSQL timestamp formatting.