pandas - 如何在不使用胶水开发端点的情况下在本地将数据框转换为 DynamicFrame?
问题描述
我正在尝试在本地对我的 pyspark 脚本运行单元测试,以便可以将其集成到我们的 CI 中。
$ pyspark
...
>>> import pandas as pd
>>> df = pd.DataFrame([(1,2,3), (4,5,6)])
>>> df
0 1 2
0 1 2 3
1 4 5 6
根据文档,我应该能够使用以下内容进行转换:
from awsglue.dynamicframe import DynamicFrame
dynamic_frame = DynamicFrame.fromDF(dataframe, glue_ctx, name)
但是,当我尝试转换为 DynamicFrame 时,尝试实例化gluecontext 时出现错误
$ pyspark
>>> from awsglue.context import GlueContext
>>> sc
<SparkContext master=local[*] appName=PySparkShell>
>>> glueContext = GlueContext(sc)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Library/Python/2.7/site-packages/awsglue/context.py", line 43, in __init__
self._glue_scala_context = self._get_glue_scala_context(**options)
File "/Library/Python/2.7/site-packages/awsglue/context.py", line 63, in _get_glue_scala_context
return self._jvm.GlueContext(self._jsc.sc())
TypeError: 'JavaPackage' object is not callable
如何在不使用 AWS Glue 开发终端节点的情况下使其正常工作?我不想每次提交代码都被收费。这太荒谬了。
解决方案
为什么要从数据帧转换为 DynamicFrame,因为您无法使用 Glue API 进行单元测试 - 没有 Glue API 的模拟?
我更喜欢以下方法:
- 每个粘合作业写入两个文件 - job_glue.py 和 job_pyspark.py
- 在 job_glue.py 中编写 Glue API 特定代码
- 编写非胶水 api 特定代码 job_pyspark.py
- 编写 pytest 测试用例来测试 job_pyspark.py
推荐阅读
- ssl - 带有 SDS 和 Mutual TLS 的 Istio:上游连接错误或在标头之前断开/重置。重置原因:连接失败
- javascript - 索引值无法更新
- reactjs - 在 React Redux 中进行测试
- reactjs - 更新父状态时更新子选项列表
- mysql - 如何将 SQL 查询合并为整数?
- java - RecyclerView 导航返回时不显示任何内容(导航组件)
- r - 过滤在另一列中指定编号的列
- excel - 在与代码相同的工作簿中引用工作表会生成错误 91:对象变量或未设置块变量
- php - 如果验证失败,如何关注错误的文本字段
- android - 保护 tensorflow-lite 模型