There are two common ways to create a PySpark DataFrame from an existing DataFrame:
Method 1: Specify Columns to Keep From Existing DataFrame
#create new dataframe using 'team' and 'points' columns from existing dataframe
df_new = df.select('team', 'points')
Method 2: Specify Columns to Drop From Existing DataFrame
#create new dataframe using all columns from existing dataframe except 'conference'
df_new = df.drop('conference')
The following examples show how to use each method in practice with the following PySpark DataFrame:
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
#define data
data = [['A', 'East', 11, 4],
['A', 'East', 8, 9],
['A', 'East', 10, 3],
['B', 'West', 6, 12],
['B', 'West', 6, 4],
['C', 'East', 5, 2]]
#define column names
columns = ['team', 'conference', 'points', 'assists']
#create dataframe using data and column names
df = spark.createDataFrame(data, columns)
#view dataframe
df.show()
+----+----------+------+-------+
|team|conference|points|assists|
+----+----------+------+-------+
| A| East| 11| 4|
| A| East| 8| 9|
| A| East| 10| 3|
| B| West| 6| 12|
| B| West| 6| 4|
| C| East| 5| 2|
+----+----------+------+-------+
Example 1: Specify Columns to Keep From Existing DataFrame
We can use the following syntax to create a new PySpark DataFrame that contains only the team and points columns from the existing DataFrame:
#create new dataframe using 'team' and 'points' columns from existing dataframe
df_new = df.select('team', 'points')
#view new dataframe
df_new.show()
+----+------+
|team|points|
+----+------+
| A| 11|
| A| 8|
| A| 10|
| B| 6|
| B| 6|
| C| 5|
+----+------+
Notice that the new DataFrame only contains the team and points columns from the existing DataFrame, just as we specified.
Example 2: Specify Columns to Drop From Existing DataFrame
We can use the following syntax to create a new PySpark DataFrame that contains all columns from the existing DataFrame except the conference column:
#create new dataframe using all columns from existing dataframe except 'conference'
df_new = df.drop('conference')
+----+------+-------+
|team|points|assists|
+----+------+-------+
| A| 11| 4|
| A| 8| 9|
| A| 10| 3|
| B| 6| 12|
| B| 6| 4|
| C| 5| 2|
+----+------+-------+
Notice that the new DataFrame contains all columns from the existing DataFrame except the conference column.
Note: In this example we only specified one column to exclude from the existing DataFrame, but you can specify multiple columns to exclude within the drop function by specifying the column names in quotes separated by commas.
Additional Resources
The following tutorials explain how to perform other common tasks in PySpark:
PySpark: How to Select Rows Based on Column Values
PySpark: How to Select Rows by Index in DataFrame
PySpark: How to Select Columns by Index in DataFrame