如何解决在 Palantir Foundry 中为特定类型的所有列创建期望
我使用 expectations
和 Check
来确定是否可以将十进制类型的列转换为 int 或 long 类型。如果列包含整数或小数,其中小数部分仅包含零,则可以安全地转换列。我使用正则表达式函数 rlike
检查它,因为我找不到任何其他使用 expectations
的方法。
问题是,我可以在不明确列出列名的情况下对所有类型为十进制的列进行此类检查吗? df.columns
尚不可用,因为我们尚未进入 my_compute_function
。
from transforms.api import transform_df,Input,Output,Check
from transforms import expectations as E
@transform_df(
Output("ri.foundry.main.dataset.1e35801c-3d35-4e28-9945-006ec74c0fde"),inp=Input(
"ri.foundry.main.dataset.79d9fa9c-4b61-488e-9a95-0db75fc39950",checks=Check(
E.col('DSK').rlike('^(\d*(\.0+)?)|(0E-10)$'),'Decimal col DSK can be converted to int/long.',on_error='WARN'
)
),)
def my_compute_function(inp):
return inp
解决方法
您说得对,在输入 df.columns
的范围之前 my_compute_function
不可用。也无法从运行时添加期望值,因此使用此方法需要对列名称进行硬编码并生成期望值。
触及问题的第一部分 - 在另一种方法中,您可以尝试在上游转换中进行 decimal -> int/long
转换,将结果存储在单独的列中,然后使用 E.col('col_a').equals_col('converted_col_a')
。
通过这种方式,您可以简化 Expectation
条件,同时隐式处理转换会下溢/溢出的情况,因为 DecimalType
可以包含任意大/小值 (https://spark.apache.org/docs/latest/sql-ref-datatypes.html) .
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。