检查pyspark中是否有NA的有效方法

曼里克

我有一个名为的pyspark数据框df我想知道他的列是否包含NA,我不在乎它只是一行还是全部。问题是,我目前知道是否有NA的方式是这样的:

from pyspark.sql import functions as F

if (df.where(F.isnull('column_name')).count() >= 1):
    print("There are nulls")
else:
    print("Yey! No nulls")

我在这里看到的问题是,我需要计算整列中的空值数量,这浪费了大量时间,因为我希望该过程在找到第一个空值时停止。

我曾考虑过这种解决方案,但不确定是否可以工作(因为我与很多其他人一起在集群中工作,因此执行时间取决于集群中其他人运行的多项工作,因此我无法比较这两种方法在均匀条件下):

(df.where(F.isnull('column_name')).limit(1).count() == 1)

增加限制有帮助吗?是否有更有效的方法来实现这一目标?

杰西·天野(Jesse Amano)

没有非穷举的搜索不存在的东西。

如果null存在具有的记录(请参见下文),我们可能会从查询中挤出更多性能,但是什么时候不存在呢?如果您打算多次运行此查询,并且每次都更改答案,那么您应该知道(我并不是说您不是),如果答案是“null整个过程中没有任何值数据框”,那么您将不得不扫描整个数据框以了解这一点,并且没有一种快速的方法来做到这一点。如果您经常需要此类信息,而答案经常是“否”,则几乎可以肯定地希望将此类信息保留在某个地方,并在每次插入可能具有null值的记录时通过仅检查该记录来对其进行更新。

不要使用count()。

count() 可能会使情况变得更糟。

  • 在计数情况下,Spark使用了广泛的转换,并实际上在每个分区上应用了LocalLimit并混洗部分结果以执行GlobalLimit。
  • 以Spark为例,Spark使用了窄变换并仅在第一个分区上评估了LocalLimit。

换句话说,.limit(1).count()可能从数据集的每个分区中选择一个示例,然后再从该示例列表中选择一个示例。您的意图是在找到一个示例后立即中止操作,但是不幸的是,count()它似乎还不够聪明无法自行实现。

作为由同一个例子提到了,不过,你可以使用take()first()head()达到你想要的使用情况。这将更有效地限制要检查的分区数:

如果不需要重新排序(无需聚合,联接或排序),则将优化这些操作以检查足以满足该操作的分区-可能是数据集整体分区的较小子集。

请注意,在其他情况下count() 可以提高性能。正如另一个SO问题正确指出的那样,

两者都不能保证总体上更好的性能。

可能还有更多您可以做。

根据您的存储方法和架构,您也许可以从查询中获取更多性能。

  • 由于您甚至对在这种情况下选择的行的值都不感兴趣,因此可以select(F.lit(True))isnull之间插入一个take从理论上讲,这应该减少集群中的工人需要传输的信息量。如果只有几个简单类型的列,这不太重要,但是如果您具有复杂的数据结构,这可能会有所帮助,而且不太可能受到损害。
  • 如果您知道数据的分区方式,并且知道自己感兴趣的分区,或者对哪个分区(如果有)可能包含null有很好的猜测,则绝对应该通过以下方式过滤数据框:该分区以加快查询速度。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

检查DataReader中是否存在列的有效方法

在Angular中,这是在尝试关闭可观察的订阅之前是否检查它是否有效的有效方法?

Pyspark数据框:检查日期列中的值是否有效

在 Kotlin 中是否有更优雅的方法来检查 String 是否是有效的 Int?

在PySpark 1.6中是否有更有效的方法来实现余弦相似度?

Pandas:检查 A 列中的值是否在 B 列中的值列表中的有效方法

检查点是否在菱形内的有效方法

检查网址是否有效的最佳方法

检查调用shared_from_this()是否有效的方法?

检查属性是否存在的最有效方法

检查两列之间不等式的有效方法,以解决R中的NA?

检查可选列表在java中是否有效

检查日期在Typescript中是否有效?

检查Kerberos KeyTab文件在Java中是否有效

如何在lua中检查url是否有效?

如何检查URL在Swift中是否有效?

检查URL在Elixir中是否有效

检查URL在Swift 4中是否有效

检查 doc($XML) 中的 XML 是否有效

如何检查代理在JavaScript中是否有效

检查输入的文本在Xtext中是否有效

检查 PHP 7 中是否存在对象值的最有效方法

检查它是否是 Python 中任何组的子集的有效方法

在Scala中,检查数组是否单调的有效方法是什么?

检查Unicode字符串是否为NFC在Python中的有效方法?

Python中检查对象属性是否分配了DataFrame的最有效方法?

检查未知对象中是否存在对象的最有效的Javascript方法

在Windows上的Java中检查文件是否为空的最有效方法

检查NumPy数组中是否存在值的最有效方法是什么?