使用两列构建一棵树并计算级别



>我有一个与此类似的问题,因此,我使用了相同的示例: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())

最新更新