在 pyspark 中的特定列上应用过滤器描述

Posted

技术标签:

【中文标题】在 pyspark 中的特定列上应用过滤器描述【英文标题】:Apply describe with filter on column specific in pyspark 【发布时间】:2018-08-03 11:46:41 【问题描述】:

我在 hive hive_tbl 中有一个表,列有 'col_1','col_2','col_3'。我在上述数据之上创建了一个数据框。

现在我正在获取使用describe() 指定的列的统计信息,结果如下。

+-------+------------------+------------------+------------------+
|summary|          col1    |          col2    |   col3           |
+-------+------------------+------------------+------------------+
|  count|          17547479|          17547479|          17547479|
|   mean|2.0946498354549963| 1.474746257282603|1943.9881619448768|
| stddev|1.7921560893864912|1.2898177241581452| 40126.73218327477|
|    min|               0.0|               0.0|               0.0|
|    max|              99.0|              60.0|       1.6240624E8|
+-------+------------------+------------------+------------------+ 

上面的计数是给出整个表中记录的计数。 但是我们是否可以在使用 describe 时应用特定于列的过滤器,即在获取某些列的计数时我有一些空白/值要被忽略,例如 col_1 的记录计数具有良好的值 549023

我们可以得到以下结果吗?

+-------+------------------+------------------+------------------+
|summary|          col1    |          col2    |   col3           |
+-------+------------------+------------------+------------------+
|  count|          549023  |            854049|          17547479|
|   mean|2.0946498354549963| 1.474746257282603|1943.9881619448768|
| stddev|1.7921560893864912|1.2898177241581452| 40126.73218327477|
|    min|               0.0|               0.0|               0.0|
|    max|              99.0|              60.0|       1.6240624E8|
+-------+------------------+------------------+------------------+ 

【问题讨论】:

忽略汇总统计中的值的条件是什么?据我所知,describe() 没有考虑 Null 值。所以看起来你的DataFrame 不包含空值? col_1='NAME'一样过滤并在使用describe()时同样获取该列的统计信息 你可以做df.filter(df['col1'].isNotNull()).describe() 【参考方案1】:

您可以使用df.na().drop() 来丢弃特定列中包含NaNNULL 值的任何行。例如,

df.na.drop(subset=["col1"]) 

将删除col1NaNNULL 的所有行。最后,您现在可以describe() 过滤后的数据框:

filtered_df = df.na.drop(subset=["col1"])
filtered_df.describe()

【讨论】:

以上是关于在 pyspark 中的特定列上应用过滤器描述的主要内容,如果未能解决你的问题,请参考以下文章

特定列上的角度表过滤器

在 pyspark 中应用 udf 过滤功能

特定列上的脚注过滤器

在新列上过滤 Spark DataFrame

使用dplyr在R中的所有列上应用iqr过滤器

如何在不同的列上做不同的过滤器