快速删除空列的方法[PySpark]

快速删除空列的方法[PySpark],pyspark,is-empty,col,Pyspark,Is Empty,Col,有没有一种简单的方法可以在pyspark中删除大型数据集(300+col>100k行)的空列?例如Python中的df.dropna(axis=1,how='all')是,您只需使用来自的答案即可。我在其中添加了一个threshold参数: import pyspark.sql.functions as F # Sample data df = pd.DataFrame({'x1': ['a', '1', '2'], 'x2': ['b', None, '

有没有一种简单的方法可以在pyspark中删除大型数据集(300+col>100k行)的空列?例如Python中的
df.dropna(axis=1,how='all')

是,您只需使用来自的答案即可。我在其中添加了一个
threshold
参数:

import pyspark.sql.functions as F

# Sample data
df = pd.DataFrame({'x1': ['a', '1', '2'],
                   'x2': ['b', None, '2'],
                   'x3': ['c', '0', '3'] })
df = sqlContext.createDataFrame(df)
df.show()

def drop_null_columns(df, threshold=0):
    """
    This function drops all columns which contain null values.
    :param df: A PySpark DataFrame
    """
    null_counts = df.select([F.count(F.when(F.col(c).isNull(), c)).alias(c) for c in df.columns]).collect()[0].asDict()
    to_drop = [k for k, v in null_counts.items() if v > threshold]
    df = df.drop(*to_drop)
    return df

# Drops column b2, because it contains null values
drop_null_columns(df).show()
输出 x2列已删除


您可以在使用时使用
threshold=df.count()
to

如何更改函数以仅在所有条目均为null/nan/空字符串时删除列?@MachineLearner这里有一个链接供您使用:感谢您提供的链接。但是提供的解决方案去掉了第二列,该列不仅包含null,还包含其他值。仅当且仅当所有行均为null/nan/empty时,我才想删除该列。@MachineLearner让我为您这样做对不起,我的意思是当且仅当所有行均为null/nan/emtpy时。
+---+---+
| x1| x3|
+---+---+
|  a|  c|
|  1|  0|
|  2|  3|
+---+---+