【问题标题】:spark Dataframe/RDD equivalent to pandas command given in description?spark Dataframe/RDD 相当于描述中给出的 pandas 命令?
【发布时间】:2016-09-23 14:44:20
【问题描述】:
【问题讨论】:
标签:
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|
## +---+-----+-----+-----+