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:
statusjob_count: number of jobs in that statusfirst_submit_time: earliestsubmit_time, formatted asYYYY-MM-DD HH24:MI:SSlast_submit_time: latestsubmit_time, formatted asYYYY-MM-DD HH24:MI:SS
Order the result alphabetically by status.
Table SparkJobs
| column | type | constraints |
|---|---|---|
| job_id | INTEGER | PRIMARY KEY, NOT NULL |
| user_id | INTEGER | NOT NULL |
| submit_time | TIMESTAMP | NOT NULL |
| status | VARCHAR(10) | NOT NULL |
Sample data:
| job_id | status | submit_time | user_id |
|---|---|---|---|
| 1001 | running | 2023-10-01 10:15:00 | 17 |
| 1002 | failed | 2023-10-01 10:20:00 | 21 |
| 1003 | success | 2023-10-01 10:25:00 | 17 |
| 1004 | running | 2023-10-01 10:30:00 | 42 |
Expected output
One row per status with job count and formatted earliest/latest submission times.
| first_submit_time | job_count | last_submit_time | status |
|---|---|---|---|
| 2023-10-01 10:20:00 | 1 | 2023-10-01 10:20:00 | failed |
| 2023-10-01 10:15:00 | 2 | 2023-10-01 10:30:00 | running |
| 2023-10-01 10:25:00 | 1 | 2023-10-01 10:25:00 | success |
Hints
- Group by status.
- Use COUNT(*), MIN(submit_time), and MAX(submit_time).
- Use TO_CHAR for PostgreSQL timestamp formatting.