【问题标题】:spark Dataframe/RDD equivalent to pandas command given in description?spark Dataframe/RDD 相当于描述中给出的 pandas 命令?
【发布时间】:2016-09-23 14:44:20
【问题描述】:

如何通过 Pyspark 数据帧或 RDD 执行与此 pandas 命令相同的功能?

df.drop(df.std()[(df.std() == 0)].index, axis=1)

有关此命令的详细信息,请参阅: How to drop columns which have same values in all rows via pandas or spark dataframe?

注意

文件太大,无法使用df.toPandas()

【问题讨论】:

    标签: python pandas pyspark apache-spark-sql rdd


    【解决方案1】:

    一般你可以使用countDistinct:

    from pyspark.sql.functions import countDistinct 
    
    cnts = (df
        .select([countDistinct(c).alias(c) for c in df.columns])
        .first()
        .asDict())
    
    df.select(*[k for (k, v) in cnts.items() if v > 1])
    
    ## +---+-----+-----+-----+
    ## | id|index| name|data1|
    ## +---+-----+-----+-----+
    ## |345|    0|name1|    3|
    ## | 12|    1|name2|    2|
    ## |  2|    5|name6|    7|
    ## +---+-----+-----+-----+
    

    这不适用于具有基数的数据,但可以处理非数字列。

    您可以使用相同的方法过滤标准差:

    from pyspark.sql.functions import stddev
    
    stddevs = df.select(*[stddev(c).alias(c) for c in df.columns]).first().asDict()
    
    df.select(*[k for (k, v) in stddevs.items() if v is None or v != 0.0])
    
    ## +---+-----+-----+-----+
    ## | id|index| name|data1|
    ## +---+-----+-----+-----+
    ## |345|    0|name1|    3|
    ## | 12|    1|name2|    2|
    ## |  2|    5|name6|    7|
    ## +---+-----+-----+-----+
    

    【讨论】:

      猜你喜欢
      • 2019-10-20
      • 2014-02-21
      • 2019-12-11
      • 1970-01-01
      • 2017-05-27
      • 2015-05-17
      • 1970-01-01
      • 1970-01-01
      • 2012-01-14
      相关资源
      最近更新 更多