我对在Palantir的打字和工作坊的概念很陌生。
1) i希望有可能显示具有某种特征的顶级组(例如总量)。这些群体超过12 000人(因此超过了Palantir限制)。
我试图指定:有12000多个类别,我将为每个类别的总和(列数量)!
是否有任何方法可以避免结果的近似,并按数量显示前100组(desc顺序)?我希望我可以通过数据透视表和直方图来做到这一点。此外,我希望能够显示正确之和前100个组的数量(甚至,更好的是,所选的直方图条)。
此外,2) .在直方图上,可以同时选择几条(不是1而不是全部)?!
3)是否可以过滤掉具有小于的,以及某个后聚合值?(不是从初始数据集,而是从聚合),我可以将枢轴输出保存在一个对象集中吗?!
我想这两个问题都可以通过一个函数来解决,您能输入TypeScript代码来得到我想要的吗?
谢谢你!!
发布于 2022-07-11 11:27:25
如果您试图聚合到超过1000个桶中,则可能会出现
问题。如果您的对象集大于此(或预期在不久的将来),则使用另一种方法。
您可以在TypeScript中创建一个Foundry函数来计算聚合,然后使用该函数填充一个讲习班表。例如,要查找沿它们行驶的总距离最大的路线(即按属性分组为routeId,之和属性为distance):
import { Function, TwoDimensionalAggregation, BucketKey, BucketValue } from "@foundry/functions-api";
import { Objects, ExampleDataFlight } from "@foundry/ontology-api";
export class MyFunctions {
@Function()
public async aircraftAggregationExample(): Promise<TwoDimensionalAggregation<string>> {
const aggregation = await Objects.search().exampleDataFlight()
.filter(o => o.distance.range().gt(0))
.groupBy(o => o.routeId.topValues())
.sum(o => o.distance);
return sortBucketsByValue2D(aggregation, 'desc');
}
}
/**
* Sort buckets of a 2D aggregation by their value in the specified order
*
* Example input 1:
* { buckets: [
* { key: { min: "2022-01-01", max: "2022-12-31" }, value: 456 },
* { key: { min: "2021-01-01", max: "2021-12-31" }, value: 123 },
* { key: { min: "2023-01-01", max: "2023-12-31" }, value: 789 },
* ]}
*
* Example output 1:
* { buckets: [
* { key: { min: "2021-01-01", max: "2021-12-31" }, value: 123 },
* { key: { min: "2022-01-01", max: "2022-12-31" }, value: 456 },
* { key: { min: "2023-01-01", max: "2023-12-31" }, value: 789 },
* ]}
*
* Example input 2:
* { buckets: [
* { key: 17, value: 456 },
* { key: 21, value: 123 },
* { key: 23, value: 789 },
* ]}
*
* Example output 2:
* { buckets: [
* { key: 21, value: 123 },
* { key: 17, value: 456 },
* { key: 23, value: 789 },
* ]}
*/
function sortBucketsByValue2D<K extends BucketKey, V extends BucketValue>(
buckets: TwoDimensionalAggregation<K, V>,
order: 'asc' | 'desc' = 'asc'
): TwoDimensionalAggregation<K, V> {
return {
// See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
buckets: buckets.buckets.sort(({ value: v1 }, { value: v2 }) => {
// These are be either numbers, timestamps or localdates which can be compared like this
return (order === 'desc' ? -1 : 1) * (v1.valueOf() - v2.valueOf());
}),
};
}发布于 2022-07-11 11:34:13
如果您想要将包含多个类别的大量数据聚合到一个直方图中进行过滤,您可能需要考虑使用等高线而不是工作室。例如,内置的“直方图”板似乎是这方面的理想选择:

这将允许您选择多个组,然后将这些过滤器应用到直方图板下的所有板上。
您可以使用Contour创建一个仪表板,它可以具有与某些不需要操作的应用程序类似的功能。你也可以使用等高线构建一个预先聚合的数据集(使用“切换到旋转数据”按钮,然后在底部的“另存为数据集”),该数据集可以支持要在讲习班中使用的对象。
发布于 2022-07-11 11:26:17
您可以在转换中完成1和3,而不是在Quiver或工作室中直接在对象上进行这种聚合。这将产生一个预先聚合的数据集,然后您可以从该数据集中创建对象。然后,您将能够在您需要聚合的工作室中使用它。
这可能对您的数据规模最有效,因为您提到您有12000个水桶。
如果要使用截断,则转换可能如下所示:
from pyspark.sql import functions as F
from transforms.api import transform_df, Input, Output
@transform_df(
Output("/path/to/route_aggregation"),
source_df=Input("/path/to/flights"),
)
def compute(source_df):
return (
source_df
.groupBy(F.col("route_id"))
.agg(F.sum("distance").alias("total_distance_travelled"))
.filter(F.col("total_distance_travelled") > 500000)
)或者如果你只想要前100名:
from pyspark.sql import functions as F, Window as W
from transforms.api import transform_df, Input, Output
@transform_df(
Output("/path/to/route_aggregation"),
source_df=Input("/path/to/flights"),
)
def compute(source_df):
return (
source_df
.groupBy(F.col("route_id"))
.agg(F.sum("distance").alias("total_distance_travelled"))
.withColumn("row_number", F.row_number().over(W.orderBy(F.col("total_distance_travelled").desc())))
.filter(F.col("row_number") <= 100)
)如果对对象使用写回,则应使用对象的写回数据集来确保聚合与通过操作进行的任何编辑保持同步。
这种方法的缺点是,您必须维护另一种对象类型,而且它比其他对象更不灵活(要进行更改,您必须更改转换逻辑,并可能更新本体定义。它还意味着聚合和单个对象值可能不同步,因为更新数据集需要时间。此外,这些聚合对象可能会扰乱您的本体,而不是真正意义上的“对象”。
避免这些缺点的一种方法是,如果您可以将此聚合附加到现有的对象上,那么这样做是有意义的。如果有本体对象来表示类别,这是可行的。例如,如果您将航班按路线分组,然后将所走的距离相加,而不是添加一个新的聚合对象,您只需在路线上添加一个属性,例如“路线上的总行程”。
https://stackoverflow.com/questions/72895172
复制相似问题