比较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 - 使用不同类型的列之间的比较进行过滤