【发布时间】:2021-12-17 06:52:02
【问题描述】:
尝试根据相关记录对列值进行分组
partColumns = (["partnumber","colVal1","colVal2", "colVal3","colVal4","colVal5"])
partrelations = ([("part0","part1","", "","",""),
("part1","","part2", "","part4",""),
("part2","part3", "", "part5","part6","part7"),
("part10","part11","", "","",""),
("part11","part13","part21", "","",""),
("part13","part21","part18", "","part20",""),
])
df_part_groups = spark.createDataFrame(data=partrelations, schema = partColumns)
试图得到如下输出 -
edges = (df_part_groups
.withColumnRenamed("partnumber", "src")
.withColumnRenamed("colVal1", "dst")
)
vertices = (edges.select("src").distinct()
.union(edges.select("dst").distinct())
.withColumnRenamed("src", "id"))
#create a graph and find all connected components
g = G.GraphFrame(vertices, edges)
cc = g.connectedComponents()
display(df_part_groups
.join(cc.distinct(), df_part_groups.device == cc.id)
.orderBy("component", "partnumber", "colVal1"))
以上是我要整理的内容
谢谢你的帮助!!
【问题讨论】:
-
您能否详细说明分组算法?这里是感兴趣的行数/列数 - 最简单的分组是
i < 3。 -
分组基于关系。就像part0与part1有关,part1与part2和part4有关。所以 part0 也间接与 part2 和 part4 相关。同样,part2 也与 part3、part5、part6、part7 相关。这就是为什么我们可以将part0、part1、part2、part3、part4、part5、part6、part7组合在一个组G1中。不,行数没有限制,但可以说我们在这个集合中不会有超过 6 列。
-
好的。你的列标题/标题和空行呢?
-
列标题无关紧要,对于这个问题。我们可以将它们视为 - 零件编号 | groupnumber,我们可以跳过空行或忽略它们
标签: python pyspark spark-graphx graphframes