>我有一个与此类似的问题,因此,我使用了相同的示例: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中做到这一点。我不知道这是否可能。我的思维模式是首先使用一些软件包f.e.构建一棵树,然后计算高度。但是,我根本不知道如何在Python/PySpark中做到这一点。我是用编程语言创建树的初学者,尽管我可以手动绘制它,但对使用编程构建自己的树知之甚少。
在寻求帮助并提供您使用的代码之前,您必须尝试解决问题。无论如何,这是您需要的:
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())