我正在尝试从几个来源获取一些数据,对其进行一些转换,然后使用 AWSglue 和 scala 将其加载到 Kinesis 中。数据来自表和 s3 存储桶等静态源,因此它不是流式 ETL 作业。目前我正在使用动态框架并尝试获取我的数据接收器并简单地执行 writeDynamicFrmae 像这样
// some logic to set up a source and do some transformations ending up with a Dynamic frame called myDynamicFrame
val kinesis = glueContext.getSinkWithFormat(
conectionType = "kinesis",
options = JsonOptions(
Map(
"streamArn" -> "arn:aws:kinesis:xxxxxxxxxxx/sink-stream",
"startingPosition" -> "TRIM_HORIZON"
"inferSchema" -> "true"
)
)
)
kinesis.writeDynamicFrame(myDynamicFrame)
我的想法是,这将从动态框架中获取数据并将其推送到运动中,但我却得到了这个错误。
Error writing to Kinesis: Failed to find data source: kinesis. Please find packages at https://spark.apache.org/third-party-projects.html
我使用的是glue版本4,在文档中它说你可以指定kinesis https://docs.aws.amazon.com/glue/latest/dg/glue-etl-scala-apis-glue-gluecontext.html #glue-etl-scala-apis-glue-gluecontext-defs-getSinkWithFormat
还有一些其他文档讨论了从数据帧创建编写器并使用 forEachBatch 方法,但这些文档看起来像是指以 kinesis 为源的作业,并且它是一个流式 etl 作业,我认为这不是因为我们'正在从 s3 批量获取数据。
如果它有助于其scala版本2.12.19 Spark 3.3和glue v4
事实证明,这个文档有点参差不齐,连接类型需要是“aws-kinesis”而不仅仅是“kinesis”