Если я правильно понял, вас интересует только сумма значений для каждого узла. В этом случае вам просто нужно смотреть каждый раз, когда узел появляется на одном из путей, и добавлять все такие значения для соответствующего узла. версия с искрой будет:
scala> val df = spark.sql(s"""
select
col1 as id,
col2 as parent_id,
col3 as path,
col4 as value
from values
(11, 1, "1-11", 1),
(12, 1, "1-12", 1),
(13, 1, "1-13", 0),
(131, 13, "1-13-131", 2),
(132, 13, "1-13-132", 1)
""")
scala> (df
.withColumn("path_arr", split(col("path"), "-"))
.select($"value", explode($"path_arr").as("node"))
.groupBy("node")
.sum()
.orderBy($"node")
).show
, что дает:
+----+----------+
|node|sum(value)|
+----+----------+
| 1| 5|
| 11| 1|
| 12| 1|
| 13| 3|
| 131| 2|
| 132| 1|
+----+----------+