PySpark select(): pick and compute columns

PySpark `select()` returns a new DataFrame containing only the columns (or column expressions) you name. You can pass column names as strings, `col()` objects, or expressions built with functions and `.alias()` to rename the output. Use `selectExpr()` to write the expressions as SQL strings.

Select vs withColumn

select() projects a specific set of columns (dropping the rest); withColumn() adds/replaces one column while keeping all others. Use select when you want to reshape the whole row.

selectExpr for SQL expressions

df.selectExpr("id", "amount * 1.18 AS with_tax") lets you write SQL-style expressions instead of building Column objects.

select, selectExpr and referring to columns

select() takes column names as strings or Column objects, so df.select('id', F.col('name'), (F.col('price') * 1.2).alias('gross')) is all valid in one call. selectExpr() takes SQL expression strings instead, which is often more compact: df.selectExpr('id', 'price * 1.2 as gross'). Use alias() (or 'as' in selectExpr) to name derived columns — otherwise you end up with machine-generated names that are awkward to reference later. To select every column plus a new one, use df.select('*', expr.alias('new')).

Ambiguous columns and nested fields

After a join, two columns can share a name and select('id') will fail as ambiguous. Qualify it by referencing the source DataFrame — df1['id'] or df1.id — or rename before joining. For nested data, dot notation reaches into structs: df.select('address.city'). To flatten every field of a struct at once, use df.select('address.*'). Selecting only the columns you actually need early in the pipeline is also a genuine optimisation for columnar formats such as Parquet, because Spark can skip reading the rest from disk.

Example (PySpark)

from pyspark.sql import SparkSession
from pyspark.sql.functions import col

spark = SparkSession.builder.getOrCreate()
df = spark.createDataFrame([(1, "Alice", 250.0)], ["id", "name", "amount"])

df.select(col("name"), (col("amount") * 1.18).alias("amount_with_tax")).show()

Projects the name column and a computed, aliased tax-adjusted amount.

Run this example in the free online PySpark compiler

Frequently asked questions

What does PySpark select() do?

It returns a new DataFrame containing only the columns or expressions you pass, dropping all others.

How do I rename a column inside select()?

Use .alias(): df.select(col("old").alias("new")). For a plain rename without select, use withColumnRenamed().

What is selectExpr in PySpark?

A variant of select that accepts SQL expression strings, e.g. df.selectExpr("id", "price * qty AS total").

Practice challenges

Open the free PySpark compiler · Data Engineering challenges · Data Engineering jobs