假设我有以下sparkDataframe:
| Node_id | Parent_id |
|---------|-----------|
| 1 | NULL |
| 2 | 1 |
| 3 | 1 |
| 4 | NULL |
| 5 | 4 |
| 6 | NULL |
| 7 | 6 |
| 8 | 3 |
这个Dataframe表示由几个不相交的树组成的树结构。现在,假设我们有一个节点列表[8,7],我们想要得到一个Dataframe,其中只包含节点,这些节点是包含列表中节点的树的根
| Node_id | Parent_id |
|---------|-----------|
| 1 | NULL |
| 6 | NULL |
使用spark查询和pyspark最好(最快)的方法是什么?
如果我在纯sql中执行此操作,我只会执行以下操作:
CREATE TABLE #Tmp
Node_id int,
Parent_id int
INSERT INTO #Tmp Child_Nodes
SELECT @num = COUNT(*) FROM #Tmp WHERE Parent_id IS NOT NULL
WHILE @num > 0
INSERT INTO #Tmp (
SELECT
p.Node_id
p.Parent_id
FROM
#Tmp t
LEFT-JOIN Nodes p
ON t.Parent_id = p.Node_id)
SELECT @num = COUNT(*) FROM #Tmp WHERE Parent_id IS NOT NULL
END
SELECT Node_id FROM #Tmp WHERE Parent_id IS NULL
我只是想知道除了使用python简单地在Dataframe上循环之外,是否还有一种更为以spark为中心的方法来使用pyspark实现这一点。
1条答案
按热度按时间jdg4fx2g1#
您还可以将上面的Dataframe与表连接起来,以获取这些节点的父节点标识。