📜  PySpark DataFrame – 选择除一个或一组列之外的所有列(1)

📅  最后修改于: 2023-12-03 14:45:52.495000             🧑  作者: Mango

PySpark DataFrame – 选择除一个或一组列之外的所有列

在 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() 函数,来选择这些列。

因此,我们可以使用类似的方式选择任意一组列之外的所有其他列。