2016-09-23 76 views

回答

0

一般來說,你可以使用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| 
## +---+-----+-----+-----+ 
+0

感謝@ zero323 –