【问题标题】:how to access the data frame without my_compute_function如何在没有 my_compute_function 的情况下访问数据框
【发布时间】:2020-10-13 19:08:17
【问题描述】:

如何在没有 my_compute_function 的情况下使用数据集。从存储库中的 file1,我想调用另一个文件中定义的函数。在第二个文件中,我想利用数据集 my_input_integration,可能没有 my_compute_function。如何组合来自两个不同存储库文件的数据集。我不想合并到一个文件中,因为我想将第二个文件用作实用程序文件。如果有人能回答这个问题,那就太好了。

存储库文件 1

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):
    return calling_function(my_input, my_output)

存储库文件 2

from transforms.api import transform, Input, Output


@transform(
    my_input_integration =Input("/my/input"),
)
def calling_function(my_input, my_output, my_input_integration??)
   
    return my_output.write_dataframe(
        my_input.dataframe(),
        column_descriptions=my_dictionary
    )

【问题讨论】:

    标签: palantir-foundry foundry-code-repositories foundry-data-connection foundry-python-transform


    【解决方案1】:

    如果我正确理解您想要实现的目标,您不能直接这样做 - 转换的任何输入都必须在该转换中定义,然后传递给实用函数,您不能“注入”输入。

    因此,实现您想要的最直接的方法是执行以下操作:

    文件 1:

    @transform(
        my_output=Output("/my/output"),
        my_input=Input("/my/input"),
        my_input_integration=Input("/my/input_integration"),
    )
    def my_compute_function(my_input, my_output, my_input_integration):
        return calling_function(my_input, my_output, my_input_integration)
    

    文件 2:

    def calling_function(my_input, my_output, my_input_integration)
        return my_output.write_dataframe(
            my_input.dataframe(),
            column_descriptions=my_dictionary
        )
    

    如果您真的认为您需要自动“注入”数据集的能力,并且将它们作为参数添加到您的转换中会太麻烦,那么可以采用更复杂的方法来定义您应用的自定义包装器到使输入数据集自动可用的转换函数。不过我真的会避免这种情况,因为它给代码增加了很多复杂性和“魔力”,对于新手和普通读者来说很难理解。

    【讨论】:

    • 是的,您理解正确。感谢您提出您的想法。它有助于。但是,我真的很想看看并了解包装器的外观。
    • @RamD 我不知道它会是什么样子,但请查看realpython.com/primer-on-python-decorators 了解有关 python 装饰器如何工作的介绍。从那里开始,您可能要做的是将@transform 装饰器替换为您自己的@transform_with_integration 装饰器,或者将它们堆叠起来,以便将您的自定义@with_integration 装饰器放在@transform 装饰器之后。在此装饰器中,您可以以某种方式使新添加的输入可用(例如,作为参数或其他方式。)不过,我不建议您沿着这条路线走。
    猜你喜欢
    • 2016-05-28
    • 2013-06-19
    • 2013-04-01
    • 2017-04-29
    • 2020-12-25
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    相关资源
    最近更新 更多