Python 如何从Pyspark中的数据帧中获取此类子集?
例如,我有以下数据帧Python 如何从Pyspark中的数据帧中获取此类子集?,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,例如,我有以下数据帧 +-----+----+------+ | idx | id | type | +-----+----+------+ | 0 | 10 | a | | 1 | 10 | b | | 2 | 20 | b | | 3 | 30 | a | +-----+----+------+ 我希望通过以下顺序步骤得到这样一个子集: 获取类型的所有ida 过滤后的id为10和30 获取id与上面相同的所有行 选择行0、1和3 生成的子集数
+-----+----+------+
| idx | id | type |
+-----+----+------+
| 0 | 10 | a |
| 1 | 10 | b |
| 2 | 20 | b |
| 3 | 30 | a |
+-----+----+------+
我希望通过以下顺序步骤得到这样一个子集:
类型的所有id
a
- 过滤后的
为10和30id
id
与上面相同的所有行
- 选择行
、0
和1
3
+-----+----+------+
| idx | id | type |
+-----+----+------+
| 0 | 10 | a |
| 1 | 10 | b |
| 3 | 30 | a |
+-----+----+------+
如何在pyspark
中实现此功能?提前谢谢
另一个后续问题是,如何实施以下内容 如果步骤更改为:
id
与上面不同的所有行
- 选择行
,因为只有此行的2
不是10或30id
+-----+----+------+
| idx | id | type |
+-----+----+------+
| 2 | 20 | b |
+-----+----+------+
您可以使用筛选器和联接操作。 一, 对于点2,您可以使用left_anti-join
joinedDS1 = dataDF.join(joinedDS, on="id", how='left_anti')
在我的头顶上使用一个自连接,类似于
df.alias('r')。连接(df.alias('l')。其中(“l.type='a'))。选择('id'),on=“id”,how=“inner”)。show()
应该会让你非常接近。谢谢你的回答@pault@pault嗨,你能帮我回答第二个问题吗?感谢您的回答,另一个后续问题:对于步骤2,我如何获得排除id
过滤的行?因此,应该选择第2行,因为只有第2行具有id
,而不是10
或30
。谢谢,我尝试了您的答案,有一个问题,加入后的列是重复的。加入时如何避免重复列?您可以使用drop column OptionTanks,您的解决方案解决了特定问题。但是我的Dataframe有多个列,当连接时,所有列都是重复的。我尝试了删除(dataDF.columns)
,但不起作用。@TrW236然后您可以指定所选列
joinedDS1 = dataDF.join(joinedDS, on="id", how='left_anti')