首页 > 解决方案 > 如何使用 Pyspark/Python 从 Microsoft Graph API 有效地获取组织层次结构?

问题描述

我正在尝试使用 Azure Databricks 中的 Microsoft Graph API 获取组织层次结构(从上到下的方法)。

以下是我要查询的 API -
https://graph.microsoft.com/v1.0/users/{id}/directReports

使用的代码 -

url = "https://graph.microsoft.com/v1.0/users/{id}/directReports"

payload={}

response = requests.request("GET", url, headers=headers, data=payload)

df = spark.read.json(sc.parallelize([response.text]))

df = df.select(f.explode_outer('value').alias('data'))

df = df.select("data.*")
df.write.mode("overwrite").saveAsTable("default.orgTree")

现在,对于第一个实例(最高级别是 CEO)它可以工作。以下是我能够在其中填充的列列表default.orgTree-

['@odata.type',  'businessPhones',  'displayName',  'givenName',  'id',  'jobTitle',  'mail',  'mobilePhone',  'officeLocation',  'preferredLanguage',  'surname',  'userPrincipalName']

但是,在某些情况下,下一个级别(我id在第一次迭代下提取的所有 - 提取)开始存在空白,并且在某些情况下它包含列表中的多个字符串字典。我的要求是迭代到最低级别(直到任何级别的直接报告人可用)并default.orgTree分别为父母和孩子附加。

有没有一种有效的方法来实现这种复杂的场景?我有点困惑如何处理后续迭代。

请帮忙。

标签: pythonazurepysparkmicrosoft-graph-apiazure-databricks

解决方案


组织层次结构目前存在以下一些端点。

向上

GET /me/manager
GET /users/{id | userPrincipalName}/manager

GET /me/directReports
GET /users/{id | userPrincipalName}/directReports

话虽如此,对于您的特定场景,请考虑归档用户语音,以便将来实施。


推荐阅读