You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Palantir Foundry的PySpark测试中使用现有数据集?

在Palantir Foundry中结合现有数据集与PyTest测试的可行方案

直接在测试函数上使用@transform装饰器会将其转换为Foundry Transform对象,破坏PyTest对测试用例的识别逻辑(依赖test_前缀+无特殊装饰器的函数)。以下是两种实用的替代方案:

方案1:测试函数内部手动加载数据集

不用@transform,直接通过Foundry的Dataset API在测试函数内读取目标数据集,同时保留PyTest的测试用例识别能力。

import pytest
from pyspark.sql import SparkSession
from foundry.dataset import Dataset

# 定义SparkSession fixture,供测试复用
@pytest.fixture(scope="session")
def spark():
    return SparkSession.builder.getOrCreate()

def test_compute(spark):
    # 直接加载Foundry现有数据集
    weightings_df = Dataset("/path/to/your/target-weightings-dataset").read_spark()
    
    # 结合自定义测试数据编写逻辑
    custom_test_data = spark.createDataFrame(
        [(1, 0.6), (2, 0.4)], 
        ["user_id", "weight_score"]
    )
    combined_data = weightings_df.union(custom_test_data)
    
    # 执行断言验证
    assert combined_data.count() == weightings_df.count() + 2

方案2:将数据集加载逻辑封装为Pytest Fixture

把数据集加载逻辑抽成可复用的fixture,提高代码整洁度,同时支持多个测试函数共享数据集。

import pytest
from foundry.dataset import Dataset

@pytest.fixture(scope="module")
def weightings_dataset(spark):
    # 加载并可选预处理数据集(如采样、过滤)
    raw_df = Dataset("/path/to/your/target-weightings-dataset").read_spark()
    return raw_df.filter(raw_df["weight_score"] > 0.1)  # 示例预处理

def test_compute_with_weightings(weightings_dataset, spark):
    # 使用fixture传入的数据集+自定义测试数据
    test_input = spark.createDataFrame([(3, 0.3)], ["user_id", "weight_score"])
    processed_result = your_transform_function(weightings_dataset, test_input)
    
    # 验证结果
    assert processed_result.select("weight_score").sum().first()[0] > 0

补充说明

  • 确保测试环境具备目标数据集的读取权限
  • 如果数据集规模较大,建议在加载时做采样或过滤,避免测试运行过慢
  • 若需基于其他Transform的输出做测试,可先定义一个负责预处理数据的Transform,再在测试函数中读取该Transform的输出数据集

内容的提问来源于stack exchange,提问作者Concrete_Buddha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 15:30:07