比较pyspark中的列集

Posted

技术标签:

【中文标题】比较pyspark中的列集【英文标题】:Comparing column sets in pyspark 【发布时间】:2019-03-07 10:36:37 【问题描述】:

我有两个列列表,例如列表 A 和列表 B。 ListB 是 listA 的子集。

我想检查 listB 中的所有列是否都存在于 listA 中,并在此比较的基础上进行一些操作。

有没有我们可以做同样的选择。

提前致谢。

【问题讨论】:

嗨@Yogesh Sharma,您能否在您的问题中添加代码sn-p,以便我们知道您想要实现的目标以及您正在努力实现的目标。 @Yogesh Sharma 我的回答对你有帮助吗? 【参考方案1】:

这不是 pyspark 问题,而是 python 问题:

选项 1:为此开发一个基本功能。这个想法是,一旦 listA 的元素被证明不包含在 listB 中,您就立即停止搜索。

def containsAllOf(listA, listB):
    for (e in listA):
        if (!listB.contains(e)):
            return false
    return true

这个解决方案也可以这样写(它更优雅,但如果给定列表不包含在第二个选项中,第一个选项可能会更快地告诉你)。

def containsAllOf(listA, listB):
    len([x for x in listA if x in listB]) == len(listA)

选项 2:使用 pyton 函数(集合论)。思路:如果listA内连接listB == listA,那么listA的所有元素肯定都包含在listB中。

def containsAllOf(listA, listB):
    length(list(set(listA) & set(listB))) == length(listA)

我不确定哪个选项最适合您,您需要进行测试。这取决于两个列表的大小。但是第一个选项已经具有相当不错的算法复杂度 O(n)。第二个预测起来有点复杂,但它可能是 O(n log(n)),具体取决于 Python 中合并两个集合的底层复杂性。

如果这解决了您的问题,请不要犹豫,点赞。

【讨论】:

以上是关于比较pyspark中的列集的主要内容,如果未能解决你的问题,请参考以下文章

PySpark DataFrames - 使用不同类型的列之间的比较进行过滤

比较 Pyspark 中的列名

拆分pyspark中的列

应用 StringIndexer 更改 PySpark 数据框中的列

在 PySpark 数据框中的组中的列上应用函数

PySpark:执行联合中的列 dtype 更改 [重复]