【发布时间】:2025-12-20 18:50:06
【问题描述】:
考虑下面的代码
question = spark.createDataFrame([{'A':1,'B':5},{'A':2,'B':5},
{'A':3,'B':5},{'A':3,'B':6}])
#+---+---+
#| A| B|
#+---+---+
#| 1| 5|
#| 2| 5|
#| 3| 5|
#| 3| 6|
#+---+---+
如何创建如下所示的 spark 数据框:
solution = spark.createDataFrame([{'C':1,'D':2},{'C':1,'D':3},
{'C':2,'D':3},{'C':5,'D':6}])
#+---+---+
#| C| D|
#+---+---+
#| 1| 2|
#| 1| 3|
#| 2| 3|
#| 5| 6|
#+---+---+
这是三元闭包的概念,我根据已经连接的边连接三角形的第三条边。
我必须有 (1,2),因为 (1,5) 和 (2,5) 存在,我必须有 (1,3),因为 (1,5) 和 (3,5) 存在,并且我必须有 (2,3),因为 (2,5) 和 (3,5) 存在。我必须有(5,6),因为(3,5)和(3,6)存在(两个方向的边缘)。 (5,6) 不应该有额外的条目,因为没有两对从 A 映射到 6。由于 A 中没有第二个实例映射到 6,因此不会添加 (5,6)。
【问题讨论】:
-
那么 C=5, D=6 是否必须有另一个条目?
-
如果我得到这个问题是正确的,你能不能:1)将原始数据框附加到自身,但 B 和 A 切换.... 2)按 A... 3)平面图分组到所有成对组合(我认为这有 scala 函数).... 4)将新列映射到单独的 C 和 D 列.... 5)如果需要,过滤重复项
-
不,C=5, D=6 不应该有额外的条目,因为没有两对从 A 映射到 6。我必须有 (1,2),因为 (1,5) 和 ( 2,5) 存在,我必须有 (1,3),因为 (1,5) 和 (3,5) 存在,我必须有 (2,3),因为 (2,5) 和 (3,5) ) 存在。由于 A 中没有第二个实例映射到 6,因此不会添加它。这有助于澄清吗?
-
所以它只有一种方式,从 A 列到 B? 5 和 6 都与上例中的 3 反向相关。另外,您能否将 cmets 中的说明添加到问题本身?
-
是的,非常好。它确实需要双向。我将在原始帖子中包含编辑。感谢您的反馈
标签: apache-spark pyspark spark-dataframe