首页 > 解决方案 > 如何在不使用胶水开发端点的情况下在本地将数据框转换为 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 开发终端节点的情况下使其正常工作?我不想每次提交代码都被收费。这太荒谬了。

标签: pandaspysparkaws-glue

解决方案


为什么要从数据帧转换为 DynamicFrame,因为您无法使用 Glue API 进行单元测试 - 没有 Glue API 的模拟?

我更喜欢以下方法:

  1. 每个粘合作业写入两个文件 - job_glue.py 和 job_pyspark.py
  2. 在 job_glue.py 中编写 Glue API 特定代码
  3. 编写非胶水 api 特定代码 job_pyspark.py
  4. 编写 pytest 测试用例来测试 job_pyspark.py

推荐阅读