📅  最后修改于: 2023-12-03 14:45:52.495000             🧑  作者: Mango
在 PySpark DataFrame 中,有时我们想要选择除一个或一组特定列之外的所有其他列。这时,我们可以使用 select()
函数,配合 drop()
函数来实现。
下面我们将演示如何实现这个功能。
首先,我们创建一个示例 DataFrame:
from pyspark.sql.functions import expr
from pyspark.sql.types import IntegerType
from pyspark.sql.functions import col
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('Exclude Columns Demo').getOrCreate()
data = [('Alice', 25, 'F', 'CS'),
('Bob', 22, 'M', 'EE'),
('Charlie', 20, 'M', 'ME')]
df = spark.createDataFrame(data, ['Name', 'Age', 'Gender', 'Branch'])
df.show()
输出:
+-------+---+------+------+
| Name|Age|Gender|Branch|
+-------+---+------+------+
| Alice| 25| F| CS|
| Bob| 22| M| EE|
|Charlie| 20| M| ME|
+-------+---+------+------+
其中,DataFrame df
有四列,分别是 'Name', 'Age', 'Gender', 'Branch'。
接下来,我们演示如何选择除 'Name' 之外的所有列:
df.select([col for col in df.columns if col != 'Name']).show()
输出:
+---+------+------+
|Age|Gender|Branch|
+---+------+------+
| 25| F| CS|
| 22| M| EE|
| 20| M| ME|
+---+------+------+
在上面的代码中,我们使用了一个列表推导式和 select()
函数,来选择除 'Name' 之外的所有列。
列表推导式 [col for col in df.columns if col != 'Name']
返回一个列表,其中包含所有非 'Name' 列的列名。
然后,我们将这个列表作为参数传递给 select()
函数,来选择这些列。
此外,我们还可以选择除多个列之外的所有列。
例如,我们要选择除 'Name', 'Age' 之外的所有列:
df.select([col for col in df.columns if col not in ['Name', 'Age']]).show()
输出:
+------+------+
|Gender|Branch|
+------+------+
| F| CS|
| M| EE|
| M| ME|
+------+------+
在上面的代码中,我们使用了一个列表推导式和 select()
函数,来选择除 'Name', 'Age' 之外的所有列。
列表推导式 [col for col in df.columns if col not in ['Name', 'Age']]
返回一个列表,其中包含所有非 'Name', 'Age' 列的列名。
然后,我们将这个列表作为参数传递给 select()
函数,来选择这些列。
因此,我们可以使用类似的方式选择任意一组列之外的所有其他列。