首页 > 解决方案 > 如何安全地删除不属于架构的列?

问题描述

我有一个包含列的数据框:[A, B, ... M]和一个只需要数据框中的少数列的模式:

StructType([StructField(A, StringType(), False),
            StructField(C, StringType(), True),
            StructField(K, StringType(), True)])

由于我不拥有架构,因此我没有所有可用列的列表。有没有办法根据架构安全有效地选择列?

标签: apache-sparkpysparkapache-spark-sql

解决方案


“更安全”的方法是检查提供的模式中的每一列是否存在于数据框中,并使用列表理解选择所有存在的列:

schema = StructType([StructField("A", StringType(), False),
                     StructField("C", StringType(), True),
                     StructField("K", StringType(), True)])

df2 = df.select(*[c for c in schema.names if c in df.columns])

推荐阅读