我正在尝试使用 Glue 的 fromDF 方法将 Python 3.10 中的 Spark 数据帧转换为动态帧
from awsglue.dynamicframe import DynamicFrame
DynamicFrame.fromDF(frame, glue_context, "node")
但这会在 CloudWatch 上引发错误,提示
com.mongodb.spark.sql.connector.exceptions.MongoSparkException: Partitioning failed.
进一步检查日志,我发现 Glue 似乎在某处使用了
$collStats
,而 AWS DocumentDB 不支持该功能。请注意,当作业是 Glue 2.0 时,此功能有效,但将其更新到 4.0 已开始导致此问题。com.mongodb.MongoCommandException: Command failed with error 304: 'Aggregation stage not supported: '$collStats''
我还没有真正尝试解决这个问题,因为这似乎是在幕后发生的,而且我无法访问 Glue 4.0 的源代码。唯一的是,这在 Glue 2.0 中并没有失败。
对我有用的是将 mongo-spark 的批量读取配置中的分区器设置为
SinglePartitionParititoner
,似乎默认值已更新为使用 SamplePartitioner
而不是在 Glue 4.0 和更新的 mongos-park 连接器版本中,这导致了问题。 参考文档