python-3.x - 如何将 AWS Glue 作业连接到 Salesforce
问题描述
我正在关注这样的问题和类似他的 博客, 但由于(我认为)库版本冲突,我无法使连接正常工作。
我想使用这个库(afaik 是最常用和引用最多的库)从 aws 粘合作业连接到 Salesforce。这段代码在我的本地机器上工作,但在胶水上,当我使用“python shell”配置时,我收到以下消息:ERROR: botocore 1.12.232 has requirement urllib3<1.26,>=1.20; python_version >= "3.4", but you'll have urllib3 1.26.2 which is incompatible.
或者,如果我使用“spark”选项:Traceback (most recent call last): File "/tmp/bp-etl-crm-sparkV2", line 1, in <module> from simple_salesforce import Salesforce File "/tmp/simple_salesforce-1.10.1-py2.py3-none-any.whl/simple_salesforce/__init__.py", line 4, in <module> from .api import Salesforce, SFType File "/tmp/simple_salesforce-1.10.1-py2.py3-none-any.whl/simple_salesforce/api.py", line 18, in <module> from .login import SalesforceLogin File "/tmp/simple_salesforce-1.10.1-py2.py3-none-any.whl/simple_salesforce/login.py", line 16, in <module> from authlib.jose import jwt ModuleNotFoundError: No module named 'authlib'
代码就像连接和查询一样简单,我再次测试过,当我从本地控制台尝试而不是 aws 胶水时,凭据和连接确实有效:
from simple_salesforce import Salesforce
def main():
print("INIT")
sf = Salesforce(username='username', password='pw', security_token='securitytoken', domain='test')
res_bulk = sf.bulk.Account.query('SELECT Id, Name FROM Table')
print(res_bulk)
if __name__ == "__main__":
main()
到目前为止我尝试了什么:
正如我所说,我尝试将作业配置为 python shell,使用 Glue 1.0 和 Spark,使用 Glue 2.0。由于依赖问题,两者都失败了。
我曾尝试降级 simple-salesforce 版本。到目前为止都没有工作,它一直在抛出
ERROR: botocore 1.12.232 has requirement urllib3<1.26,>=1.20; python_version >= "3.4", but you'll have urllib3 1.26.2 which is incompatible.
我尝试获取低于 1.26.2 的 urllib 版本,将其上传到 S3,并将其添加到我的代码要使用的库列表中。到目前为止,这还没有奏效,但我不知道为什么,因为我不知道 Glue 在被命令使用某个版本的库时会做什么,无论你做什么,它都被设计为使用,比如 urllib。
关于我可能做错什么的任何想法,或者我还能尝试使其发挥作用。
解决方案
simple_salesforce 模块依赖于 authlib、密码学等。在 Glue 版本 2.0(Spark 2.4、python 3)上,您需要将以下参数添加到胶水作业中:
--additional-python-modules:密码学==3.0,simple-salesforce==1.11.1 image_screenshot
您必须编辑作业并在“安全配置、脚本库和作业参数(可选)”下找到“作业参数”选项。
(这些版本是兼容的并且对我有用)
推荐阅读
- python - 转换没有循环的numpy数组
- web-applications - 集成网络应用
- javascript - 如果条件格式正确,如何将 JS-CSS-HTML Formatter 配置为多行?
- markdown - 是否可以在 Markdown 代码块中显示空格?
- php - 为 mPDF v8.0.6 添加字体
- r - 分组箱线图的R plotly下拉事件
- java - 这个错误“SoapFaultClientException”是什么意思?
- microsoft-graph-api - 使用 Microsoft Graph Java SDK 通过 Microsoft Teams 在线会议创建活动
- google-api - 创建新的谷歌帐户
- python - 附加到具有正确对象类型的数据框列表