如何使用Palantir Foundry中的一个函数对多个属性进行分组?



我想使用一个函数聚合几个属性。例如,我有一个函数,其中开始和结束日期是输入的,还有一个时间表对象类型与&;日期&;;;shift_type&;;;部门&;和&;小时工作&;属性。

我希望我的输出是每个日期/轮班类型/部门组合的工作时数之和。

为聚合

创建数据结构在当前的Functions聚合API中,您只能通过groupBysegmentBy函数直接从ObjectSet创建2D和3D聚合。

如果你想聚合两个以上的属性(这将是一个4+D聚合),你有两个选择:

  1. 将ObjectSet转换为object列表(通过调用.allAsync()),然后编写TypeScript逻辑将该列表转换为一个聚合对象属性的数据结构。请注意,如果您的对象集中有大量(数千或更多)对象,则此方法可能无法很好地执行。

  2. 添加一个列到对象(和后备数据集),这是你想要分组的列的复合键。在您的示例中,这可能看起来像date.2022-01-01.shift.1200.department.emergency_room。然后,在函数代码中,可以对这个组合键执行groupBy。接下来,您可以将此2D聚合转换为多维聚合,其中将组合键拆分为其各个部分。

在前端应用程序中显示聚合数据

根据您希望在何处使用此聚合数据,可能需要一些额外的步骤。下面是一些例子:

如果你有一个Slate或自定义应用程序直接调用函数并在前端处理响应,那么只要它符合允许的函数返回类型,你就可以返回聚合。

如果您希望在Workshop中的表中显示这些数据(有效地作为函数支持的数据透视表),那么您将需要使用具有函数支持列的对象表。您将需要一个具有所需粒度级别的Object(例如,其中主键是上面的组合键)。这可能是一个非常简单的对象,其中唯一的属性是这个键(可能是键的组件,如果这对过滤目的有用的话)。

我不认为您可以在函数中原生,只有当您将数据实现到您的函数驱动程序并手动编写逻辑时。但是,您可以在数据集级别创建一个列,然后将其索引到本体并查询。

在管道中(pyspark示例)

df = df.withColumn("shift_id", F.concat_ws("-", "date", "shift_type", "department"))

那么在你的函数中你可以聚合shift id:

Objects.search()
.employees()
.groupBy(e => e.shiftId.topValues())
.segmentBy(e => e.hoursWorked.topValues())
.sum()

最新更新