Bird
Raised Fist0
Apache Sparkdata~5 mins

Creating DataFrames from files (CSV, JSON, Parquet) in Apache Spark

Choose your learning style10 modes available
Introduction

We use DataFrames to organize data in rows and columns. Loading data from files like CSV, JSON, or Parquet helps us start analyzing real-world data easily.

You have a CSV file with sales data and want to analyze it.
You receive JSON logs from a web server and want to explore them.
You want to load a Parquet file from a data lake for fast processing.
You need to combine data from different file formats into one table.
You want to quickly check the contents of a data file before analysis.
Syntax
Apache Spark
spark.read.format("file_format").option("option_name", "option_value").load("file_path")

Replace file_format with csv, json, or parquet.

Options like header or inferSchema help Spark understand the data better.

Examples
Load a CSV file with headers and automatically detect data types.
Apache Spark
df_csv = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("data/sales.csv")
Load a JSON file without extra options.
Apache Spark
df_json = spark.read.format("json").load("data/logs.json")
Load a Parquet file, which is already optimized for Spark.
Apache Spark
df_parquet = spark.read.format("parquet").load("data/records.parquet")
Sample Program

This program creates a Spark session, loads three types of files into DataFrames, and prints the first 3 rows of each. It shows how easy it is to start working with data from different file formats.

Apache Spark
from pyspark.sql import SparkSession

spark = SparkSession.builder.appName("LoadFilesExample").getOrCreate()

# Load CSV file with header and schema inference
csv_df = spark.read.format("csv").option("header", "true").option("inferSchema", "true").load("./data/sample.csv")

# Load JSON file
json_df = spark.read.format("json").load("./data/sample.json")

# Load Parquet file
parquet_df = spark.read.format("parquet").load("./data/sample.parquet")

# Show first 3 rows of each DataFrame
print("CSV DataFrame:")
csv_df.show(3)

print("JSON DataFrame:")
json_df.show(3)

print("Parquet DataFrame:")
parquet_df.show(3)

spark.stop()
OutputSuccess
Important Notes

Make sure the file path is correct and accessible by Spark.

CSV files often need header and inferSchema options for better results.

Parquet files store schema inside, so no extra options are usually needed.

Summary

DataFrames organize data in rows and columns for easy analysis.

You can load CSV, JSON, and Parquet files using spark.read.format().load().

Options help Spark understand the data better, especially for CSV files.

Practice

(1/5)
1. What is the main purpose of creating a DataFrame from a file in Apache Spark?
easy
A. To write data back to a file
B. To organize data in rows and columns for easy analysis
C. To delete data from the file system
D. To convert data into plain text format

Solution

  1. Step 1: Understand DataFrame concept

    A DataFrame is a table-like structure with rows and columns used for data analysis.
  2. Step 2: Purpose of loading files

    Loading files into DataFrames allows Spark to process and analyze data efficiently.
  3. Final Answer:

    To organize data in rows and columns for easy analysis -> Option B
  4. Quick Check:

    DataFrames = organized data [OK]
Hint: DataFrames = tables for easy data work [OK]
Common Mistakes:
  • Confusing DataFrame creation with file writing
  • Thinking DataFrames delete files
  • Assuming DataFrames convert data to plain text
2. Which of the following is the correct syntax to load a CSV file into a Spark DataFrame?
easy
A. spark.read.format('csv').load('file.csv')
B. spark.read.load('file.csv', format='csv')
C. spark.load('csv', 'file.csv')
D. spark.read.csv('file.csv')

Solution

  1. Step 1: Recall Spark CSV loading syntax

    The standard way is to use spark.read.format('csv').load('filename').
  2. Step 2: Check each option

    spark.read.format('csv').load('file.csv') matches the correct syntax; others are incorrect or invalid methods.
  3. Final Answer:

    spark.read.format('csv').load('file.csv') -> Option A
  4. Quick Check:

    Use format('csv').load() for CSV [OK]
Hint: Use spark.read.format('csv').load() for CSV files [OK]
Common Mistakes:
  • Using spark.read.csv() without options
  • Trying spark.load() which doesn't exist
  • Passing format as a keyword argument in load()
3. Given the following code, what will be the schema of the DataFrame?
df = spark.read.format('json').load('people.json')
df.printSchema()

Assuming 'people.json' contains records like {"name": "Alice", "age": 30}.
medium
A. root |-- name: string (nullable = true) |-- age: long (nullable = true)
B. root |-- name: integer (nullable = true) |-- age: string (nullable = true)
C. root |-- name: string (nullable = false) |-- age: integer (nullable = false)
D. root |-- name: string (nullable = true) |-- age: string (nullable = true)

Solution

  1. Step 1: Understand JSON schema inference

    Spark infers types from JSON: "name" is string, "age" is number (long).
  2. Step 2: Check nullability and types

    By default, fields are nullable. Age inferred as long (integer type in Spark).
  3. Final Answer:

    root |-- name: string (nullable = true) |-- age: long (nullable = true) -> Option A
  4. Quick Check:

    JSON fields inferred correctly [OK]
Hint: JSON fields infer types automatically [OK]
Common Mistakes:
  • Assuming age is string instead of long
  • Thinking fields are non-nullable by default
  • Confusing integer with string types
4. What is wrong with this code snippet to load a Parquet file?
df = spark.read.format('parquet').load('data.parquet')
df.show()

Assuming 'data.parquet' exists and is valid.
medium
A. You must specify schema before loading Parquet files
B. The format should be 'parq' instead of 'parquet'
C. The load method requires a file extension in the path
D. Nothing is wrong; this code will load and show the DataFrame correctly

Solution

  1. Step 1: Check Parquet loading syntax

    Using spark.read.format('parquet').load('file') is correct and standard.
  2. Step 2: Validate assumptions

    If the file exists and is valid, df.show() will display the data without error.
  3. Final Answer:

    Nothing is wrong; this code will load and show the DataFrame correctly -> Option D
  4. Quick Check:

    Correct Parquet load syntax [OK]
Hint: Parquet loads with format('parquet').load() [OK]
Common Mistakes:
  • Using wrong format string like 'parq'
  • Thinking schema is mandatory for Parquet
  • Believing file extension is required in load()
5. You want to load a CSV file with a header and infer the schema automatically. Which code snippet correctly achieves this?
hard
A. spark.read.format('csv').load('data.csv').option('header', 'true').option('inferSchema', 'true')
B. spark.read.csv('data.csv', header=True, inferSchema=True)
C. spark.read.format('csv').option('header', 'true').option('inferSchema', 'true').load('data.csv')
D. spark.read.load('data.csv').option('header', 'true').option('inferSchema', 'true')

Solution

  1. Step 1: Understand CSV options usage

    Options like header and inferSchema must be set before load() when using format().
  2. Step 2: Analyze each option

    spark.read.format('csv').option('header', 'true').option('inferSchema', 'true').load('data.csv') sets options correctly before load(). spark.read.csv('data.csv', header=True, inferSchema=True) uses invalid syntax for Spark. spark.read.format('csv').load('data.csv').option('header', 'true').option('inferSchema', 'true') sets options after load(), which is wrong. spark.read.load('data.csv').option('header', 'true').option('inferSchema', 'true') misses format('csv').
  3. Final Answer:

    spark.read.format('csv').option('header', 'true').option('inferSchema', 'true').load('data.csv') -> Option C
  4. Quick Check:

    Set options before load() [OK]
Hint: Set CSV options before load() with format('csv') [OK]
Common Mistakes:
  • Setting options after load() call
  • Using Python-style keyword arguments in Spark
  • Not specifying format('csv') before load()
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard