首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >PySpark:过滤掉数据框中列值多次出现的行

PySpark:过滤掉数据框中列值多次出现的行
EN

Stack Overflow用户
提问于 2019-02-22 04:21:36
回答 1查看 711关注 0票数 1

给定一个包含两列的PySpark数据帧,我希望将数据集拆分为两个数据帧:一个是ColA和ColB的组合是唯一的,另一个是不是唯一的。

举个例子:

代码语言:javascript
复制
ColA | ColB | ColCDoesntMatter
1    | 2    | 4
1    | 3    | 3
2    | 2    | 2
1    | 2    | 6
2    | 2    | 8
2    | 3    | 9

唯一的A/B配对是:

代码语言:javascript
复制
1-3
2-3

非唯一的A/B配对包括:

代码语言:javascript
复制
1-2
2-2

因此,一个数据帧将包含具有唯一AB值的所有行,而另一个数据帧将包含非唯一AB值。ColC对过滤器无关紧要,但需要保留。如何运行此筛选器?

编辑:请注意,我不能使用dropDuplicates,因为它实际上是A和B的组合,需要是唯一的,而不仅仅是A或B。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-22 04:31:18

代码语言:javascript
复制
# count rows per A-B
dfWithRowCount = df.selectExpr("*", "count('*') over (partition by (ColA, ColB)) as nrows")

# filter
uniqueAB = dfWithRowCount.filter(dfWithRowCount.nrows == 1).drop('nrows')
nonUniqueAB = dfWithRowCount.filter(dfWithRowCount.nrows > 1).drop('nrows')

nonUniqueAB.show()
+----+----+----+
|ColA|ColB|ColC|
+----+----+----+
|   2|   2|   2|
|   2|   2|   8|
|   1|   2|   4|
|   1|   2|   6|
+----+----+----+

uniqueAB.show()
+----+----+----+
|ColA|ColB|ColC|
+----+----+----+
|   1|   3|   3|
|   2|   3|   9|
+----+----+----+
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54815613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档