我如何从本地将数据帧转换为DynamicFrame,而无需使用粘合开发Endpoints转换为DynamicFrame?

时间:2018-12-01 01:20:18

标签: pandas pyspark aws-glue

我正在尝试在本地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

根据the documentation,我应该可以使用以下内容进行转换:

from awsglue.dynamicframe import DynamicFrame
dynamic_frame = DynamicFrame.fromDF(dataframe, glue_ctx, name)

但是当我尝试转换为DynamicFrame时,尝试实例化胶水上下文时会出错

$ 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 Dev Endpoints在没有的情况下正常工作?我不想每次都每次向我收费。太荒谬了。

2 个答案:

答案 0 :(得分:0)

我认为,除了使用胶水之外,对于我们而言,没有其他选择。供参考:Can I test AWS Glue code locally?

答案 1 :(得分:0)

为什么要从数据帧转换为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