首页 > 解决方案 > 有没有办法填充特定于数据集的列描述?

问题描述

数据集 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"
        },
         ???  
    )

标签: palantir-foundryfoundry-code-repositoriesfoundry-python-transform

解决方案


一种方法是为所有数据集提供“覆盖字典”,其中特定于数据集的描述可能优先。

即你有:

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)
  ...

推荐阅读