Apache spark Spark-如何使用或关系按多个键对数据进行分组

Apache spark Spark-如何使用或关系按多个键对数据进行分组,apache-spark,pyspark,Apache Spark,Pyspark,我有一个RDD,如下所示: [ Row(device='1', token='aaa', other_value=1), Row(device='1', token='bbb', other_value=1), Row(device='2', token='bbb', other_value=1), Row(device='4', token='ddd', other_value=1), ... ] 为了进行一些处理(不是为了聚合),我需要将具

我有一个RDD,如下所示:

[
    Row(device='1', token='aaa', other_value=1),  
    Row(device='1', token='bbb', other_value=1), 
    Row(device='2', token='bbb', other_value=1), 
    Row(device='4', token='ddd', other_value=1), 
    ...
]
为了进行一些处理(不是为了聚合),我需要将具有相同设备或令牌的行分组在一起。例如,上面的前3行应该分组在一起以便进一步处理。(第1行和第2行具有相同的设备1,第2行和第3行具有相同的令牌bbb)

基本上,我想做一些

rdd.groupBy(same device or same token)
在spark有可能吗


更新

对于上述示例,预期输出将是如下所示的RDD:

[
    [
        Row(device='1', token='aaa', other_value=1),  
        Row(device='1', token='bbb', other_value=1), 
        Row(device='2', token='bbb', other_value=1)
    ],
    [
        Row(device='4', token='ddd', other_value=1)
    ]
]

行所属的组的属性是可传递的。因此,一个简单的
groupBy
将不起作用。一种选择是将数据解释为,并用于在图中查找数据。输入数据的每一行都是图形的一条边,源=
设备
和目标=
令牌

#设置图形框架
导入操作系统
os.environ[“PYSPARK_SUBMIT_ARGS”]=(
“--封装图形框架:图形框架:0.8.1-spark3.0-s_2.12 pyspark shell”
)
火花=。。。
#输入数据
rdd=spark.sparkContext.parallelize([Row(device='1',token='aaa',other_value=1),
行(设备=1',令牌=bbb',其他值=1),
行(设备=2',令牌=bbb',其他值=1),
行(设备=4',令牌=ddd',其他值=1)])
df=spark.createDataFrame(rdd)
边=df\
.WithColumn重命名(“设备”、“src”)\
.WithColumn重命名(“令牌”、“dst”)
顶点=边。选择(“src”).distinct()\
.union(edges.select(“dst”).distinct())\
.WithColumnRename(“src”、“id”)
#创建图形并查找所有连接的组件
g=图形帧(顶点、边)
cc=g.连接的组件()
join(cc.distinct(),df.device==cc.id)\
.orderBy(“组件”、“设备”、“令牌”)\
.show()
输出:

+------+-----+-----------+---+------------+
|设备|令牌|其他|值| id |组件|
+------+-----+-----------+---+------------+
|4 | ddd | 1 | 4 | 60129542144|
|1 | aaa | 1 | 1 | 335007449088|
|1 | bbb | 1 | 1 | 335007449088|
|2 | bbb | 1 | 2 | 335007449088|
+------+-----+-----------+---+------------+

对于
组件
具有相同值的所有行都属于同一组。

您可以添加预期的输出吗?@Srinivas updated如果有一行
行(device='4',token='bbb',other_value=1)
该行属于哪个组?@werner在这种情况下,所有内容都应该属于1组。本质上,这就像一个联合查找/不相交集问题。我很想将任何具有相同设备或令牌的设备分组到一个组中