spark Dataframe/RDD 相当于描述中给出的 pandas 命令?

Posted

技术标签:

【中文标题】spark Dataframe/RDD 相当于描述中给出的 pandas 命令?【英文标题】:spark Dataframe/RDD equivalent to pandas command given in description? 【发布时间】: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()

【问题讨论】:

【参考方案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|
## +---+-----+-----+-----+

【讨论】:

以上是关于spark Dataframe/RDD 相当于描述中给出的 pandas 命令?的主要内容,如果未能解决你的问题,请参考以下文章

[Spark][Python][DataFrame][RDD]从DataFrame得到RDD的例子

Spark DataFrame/RDD 中的前 N ​​个项目

SparkSQL入门

Dataframe.rdd.map().collect 在 PySpark 中不起作用 [重复]

回顾IDEA 开发 SparkSQL 基础编程

如何在 PySpark 中为一个组迭代 Dataframe / RDD 的每一行。?