Palantir Foundry代码仓库本地开发:连接Snowflake与Spark会话配置
实现Palantir Foundry本地开发(类似Snowpark模式)
Foundry提供了本地代码开发工具链,可以实现类似Snowpark的本地编写代码、连接Foundry集群运行Spark任务的工作流。以下是具体方案、代码示例及最佳实践:
核心方案概述
Foundry的本地开发依赖Foundry CLI和官方Spark集成库,通过本地环境连接Foundry集群的Spark运行器,实现代码本地编写、远程执行的模式——既保留本地IDE的调试便利性,又能利用Foundry集群的计算资源处理大规模数据。
步骤1:前置准备
- 安装Foundry CLI:从Foundry控制台下载对应操作系统的CLI工具,安装后执行
foundry login完成身份验证。 - 克隆代码仓库:你已完成此步骤,确保本地代码与Foundry仓库同步。
- 环境版本对齐:通过
foundry code env show查看集群的Spark、Python版本,用pyenv或conda管理本地环境,确保版本匹配。
步骤2:创建Foundry Spark会话(代码示例)
以下是类似Snowpark会话创建的Python代码,用于连接Foundry集群并读取数据集:
import os from pyspark.sql import SparkSession def create_foundry_spark_session(): # 从环境变量或Foundry CLI本地配置读取连接参数 spark = SparkSession.builder \ .appName("Local Foundry Dev Session") \ # Foundry实例域名,如https://your-foundry-instance.com .config("spark.foundry.host", os.getenv("FOUNDRY_HOST")) \ # 通过`foundry token create`生成的临时令牌 .config("spark.foundry.token", os.getenv("FOUNDRY_TOKEN")) \ # 目标项目的RID或名称(RID可从项目URL获取) .config("spark.foundry.project", os.getenv("FOUNDRY_PROJECT")) \ .getOrCreate() return spark # 初始化会话 spark = create_foundry_spark_session() # 读取Foundry数据集(替换为你的数据集路径/RID) dataset_path = "/your-project-name/datasets/your-dataset-rid" df = spark.read.format("com.palantir.foundry.spark").load(dataset_path) # 执行数据操作 df.show(10)
参数说明
FOUNDRY_HOST:你的Foundry实例域名(如https://my-foundry.palantir.com)。FOUNDRY_TOKEN:执行foundry token create生成的短期访问令牌,也可通过Foundry CLI自动注入(无需手动配置)。FOUNDRY_PROJECT:项目的RID(可在Foundry项目页面URL中获取)或项目名称。
步骤3:本地运行与调试
- IDE直接运行:在VS Code、PyCharm等IDE中执行代码,Spark会话会自动连接Foundry集群执行任务。
- CLI提交运行:执行
foundry code run your_script.py,将本地代码提交到Foundry集群运行,适合处理大规模数据。 - 断点调试:利用IDE的断点功能,在本地调试代码逻辑的同时,借助集群资源处理数据。
最佳实践
- 安全优先:不要将
FOUNDRY_TOKEN硬编码到代码中,使用环境变量或Foundry CLI本地配置(令牌默认存储在~/.foundry/config.yaml)。 - 数据集本地同步:对频繁调试的小数据集,执行
foundry dataset sync <dataset-rid> --local-path ./local-data同步到本地,加快调试速度。 - 依赖一致性:在
requirements.txt中声明依赖,优先使用Foundry集群提供的Spark版本,避免版本冲突。 - 测试分层:单元测试用本地Spark会话模拟环境;集成测试通过
foundry code test提交到集群执行。 - 代码定期同步:定期执行
git push将本地代码推送到Foundry仓库,确保集群代码与本地代码一致。
内容的提问来源于stack exchange,提问作者Luis Trindade
相关产品推荐
相关产品推荐

