построить дерево, используя два столбца и посчитать уровень - PullRequest
0 голосов
/ 03 октября 2019

У меня есть вопрос, похожий на этот, и поэтому я использовал тот же пример: https://stackoverflow.com/questions/46722740/hierarchical-data-efficiently-build-a-list-of-every-descendant-for-each-node#=

У меня есть набор данных из двух столбцов, изображающий несколько дочерних и родительских отношений для компаний, которые образуют большое дерево,Я хотел бы использовать это для подсчета высоты дерева.

Исходный ввод:

   child  parent
8   1000    1000
1   2010    1000
7   2100    1000
5   2110    1000
3   3000    2110
2   3011    2010
4   3033    2100
0   3102    2010
6   3111    2110

То, что я хотел бы сделать, это получить высоту этого дерева. В этом конкретном случае высота будет равна трем.

Я не уверен, как это сделать в Python или PySpark. Я не знаю, возможно ли это. Мой шаблон мышления состоял в том, чтобы сначала построить дерево, используя некоторый пакет fe, а затем посчитать высоту. Тем не менее, я понятия не имею, как это сделать в Python / PySpark вообще. Я начинаю создавать деревья на языках программирования и не очень разбираюсь в построении собственного дерева с использованием программирования, хотя могу рисовать его вручную.

1 Ответ

0 голосов
/ 05 октября 2019

Вы должны попытаться решить свою проблему, прежде чем обращаться за помощью и предоставить код, который вы использовали. В любом случае вот что вам нужно:

class Node:
  def __init__(self, name, desc):
    self.name = name
    self.desc = desc


  def height(self):
    if len(self.desc)==0:
      return 1
    else:
      return 1 + max(len(child.desc) for child in n1000.desc)


n3000 =Node("3000", []);
n3011 =Node("3011", []);
n3033 =Node("3033", []);
n3102 =Node("3102", []);
n3111 =Node("3111", []);




n2010 = Node("2010", [n3011, n3102]);
n2100 = Node("2100",[n3033]);
n2110 = Node("2110", [n3000, n3111]);

n1000 = Node("1000", [n2010, n2100, n2110]);

#print(max(len(child.desc) for child in n1000.desc))

print(n1000.name, n2010.height())
...