palantir-foundry - 有没有办法填充特定于数据集的列描述?
问题描述
数据集 1 和数据集 2 具有相同的列名但不同的描述。在数据集 1 转换中,我会说我正在处理数据集 1,因此它必须优先考虑该数据集 1 的特定描述。如果我正在为另一个数据集进行转换,我想优先考虑该数据集。有没有办法填充特定于数据集的列描述?
例如,参数中的参数my_compute_function
是否可以传递数据集名称,该数据集名称必须具有优先级 Column1,数据集 1 的列描述,{Dataset 1 name}。Column1,数据集 2 的列描述,{Dataset 2 name},...
from transforms.api import transform, Input, Output
@transform(
my_output=Output("/my/output"),
my_input=Input("/my/input"),
)
def my_compute_function(my_input, my_output):
my_output.write_dataframe(
my_input.dataframe(),
column_descriptions={
"col_1": "col 1 description"
},
???
)
解决方案
一种方法是为所有数据集提供“覆盖字典”,其中特定于数据集的描述可能优先。
即你有:
from transforms.api import transform, Input, Output
GENERAL_DESCRIPTIONS = {
"col_1": "my general description"
}
LOCAL_DESCRIPTIONS = {
"/path/to/my/dataset": {
"col_1": "my override description"
}
}
@transform(
my_output=Output("/path/to/my/dataset"),
my_input=Input("/path/to/input"),
)
def my_compute_function(my_output, my_input):
local_updates = LOCAL_DESCRIPTIONS.get(my_output.path, {})
local_descriptions = GENERAL_DESCRIPTIONS.copy()
local_descriptions.update(local_updates)
my_output.write_dataframe(
my_input.dataframe(),
column_descriptions=local_descriptions
)
然后,这将允许您放置GENERAL_DESCRIPTIONS
模块的根目录,并.py
在顶部的每个转换文件中覆盖您的“本地”描述。您甚至可以将“本地”描述放在一组转换之上,这样您就不必检查每个文件来指定覆盖。
更新描述字典的最细粒度的方法是简单地:
...
GENERAL_DESCRIPTIONS = {
"col_1": "my general description"
}
LOCAL_DESCRIPTIONS = {
"col_1": "my override description"
}
...
def my_compute_function(my_output, my_input):
local_descriptions = GENERAL_DESCRIPTIONS.copy()
local_descriptions.update(LOCAL_DESCRIPTIONS)
...
推荐阅读
- prolog - 如何基于变量而不是名称调用谓词函子
- android - 如何从 Google 地图返回应用程序?
- bash - 用于替换和遍历的 Bash 脚本循环
- python - 如何将函数参数传递给函数内部的函数
- python - python-bitcoinrpc 和 python-monerorpc 的问题
- unit-testing - 如何在 Ubuntu 18.04 上使用 -msan 选项运行 go test?
- python - Wikipedia api python 返回奇怪的结果
- java - 将 Java 转换为 Kotlin:类型不匹配。必需:MenuSlidingTabStrip.OnTabSelectedListener?找到:(无,无)→布尔
- javascript - 如何将 2300 格式的 aa 类型数字转换为小时,并与 Moment.js 的当前时间进行比较?
- singly-linked-list - for循环可以运行超过指定时间吗