Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark Spark SQL—以编程方式在表上循环的最佳方式_Apache Spark_Pyspark_Apache Spark Sql - Fatal编程技术网

Apache spark Spark SQL—以编程方式在表上循环的最佳方式

Apache spark Spark SQL—以编程方式在表上循环的最佳方式,apache-spark,pyspark,apache-spark-sql,Apache Spark,Pyspark,Apache Spark Sql,假设我有以下spark数据帧: | Node_id | Parent_id | |---------|-----------| | 1 | NULL | | 2 | 1 | | 3 | 1 | | 4 | NULL | | 5 | 4 | | 6 | NULL | | 7 | 6 | | 8 | 3

假设我有以下spark数据帧:

| Node_id | Parent_id |
|---------|-----------|
| 1       | NULL      |
| 2       |  1        |
| 3       | 1         |
| 4       | NULL      |
| 5       | 4         |
| 6       | NULL      |
| 7       | 6         |
| 8       | 3         |
此数据帧表示由多个不相交的树组成的树结构。现在,假设我们有一个节点列表[8,7],我们希望得到一个数据帧,其中只包含作为包含列表中节点的树的根的节点。输出如下所示:

| 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简单地在数据帧上循环外,是否还有一种更以spark为中心的使用pyspark的方法

parent_nodes = spark.sql("select Parent_id from table_name where Node_id in [2,7]").distinct()

您可以将上面的数据框与表连接起来,以获得这些节点的父节点id。

4是根节点,不是吗?“select*where Paren_id为null”应该用于获取所有根node@SomeshwarKale这将给出1,4,6-我不想要不在表中的节点的根节点。这只适用于任何树的深度不超过两级的情况。我已经更新了这个例子,对预期的行为给出了更多的解释。