You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark:多条件行筛选方法及查找两位开发者共同参与的游戏

在PySpark中筛选两位开发者共同参与的游戏列表

给定如下游戏与开发者关联数据集:

game_namedeveloper_name
XJohn
YMark
XMark
ZJohn
YJohn

要找出John和Mark都参与开发的游戏名称列表,可通过以下两种PySpark实现方案:

方案一:基于开发者集合匹配

先按游戏分组,收集每个游戏的所有开发者集合,再筛选集合包含全部目标开发者的记录:

from pyspark.sql import SparkSession
from pyspark.sql.functions import collect_set, col

# 初始化Spark会话
spark = SparkSession.builder.appName("GameDevFilter").getOrCreate()

# 构造示例DataFrame
data = [("X", "John"), ("Y", "Mark"), ("X", "Mark"), ("Z", "John"), ("Y", "John")]
df = spark.createDataFrame(data, ["game_name", "developer_name"])

# 定义目标开发者集合
target_developers = {"John", "Mark"}

# 筛选逻辑
result = df.groupBy("game_name")\
           .agg(collect_set("developer_name").alias("dev_list"))\
           .filter(col("dev_list").containsAll(list(target_developers)))\
           .select("game_name")

# 输出结果
result.show()

方案二:基于目标开发者数量统计

先过滤出仅包含目标开发者的记录,再按游戏分组统计不同开发者的数量,筛选数量等于目标开发者总数的记录:

from pyspark.sql import SparkSession
from pyspark.sql.functions import collect_set, size, col

spark = SparkSession.builder.appName("GameDevFilter").getOrCreate()
data = [("X", "John"), ("Y", "Mark"), ("X", "Mark"), ("Z", "John"), ("Y", "John")]
df = spark.createDataFrame(data, ["game_name", "developer_name"])

# 筛选逻辑
result = df.filter(col("developer_name").isin("John", "Mark"))\
           .groupBy("game_name")\
           .agg(size(collect_set("developer_name")).alias("target_dev_count"))\
           .filter(col("target_dev_count") == 2)\
           .select("game_name")

result.show()

两种方案最终都会输出结果:

+---------+
|game_name|
+---------+
|        X|
|        Y|
+---------+

内容的提问来源于stack exchange,提问作者Galaxy S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 23:17:08