当前位置: 首页 > 知识库问答 >
问题:

如何为Scala Spark ETL设置本地开发环境以在AWS Glue中运行?

夹谷鸿福
2023-03-14

我希望能够在我的本地IDE中编写Scala,然后将其部署到AWS Glue作为构建过程的一部分。但是我很难找到构建AWS生成的GlueApp骨架所需的库。

aws java sdk glue不包含导入的类,我在其他任何地方都找不到这些库。虽然它们一定存在于某个地方,但它们可能只是这个库的Java/Scala端口:aws glue libs

AWS的模板scala代码:

import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.MappingSpec
import com.amazonaws.services.glue.errors.CallSite
import com.amazonaws.services.glue.util.GlueArgParser
import com.amazonaws.services.glue.util.Job
import com.amazonaws.services.glue.util.JsonOptions
import org.apache.spark.SparkContext
import scala.collection.JavaConverters._

object GlueApp {
  def main(sysArgs: Array[String]) {
    val spark: SparkContext = new SparkContext()
    val glueContext: GlueContext = new GlueContext(spark)
    // @params: [JOB_NAME]
    val args = GlueArgParser.getResolvedOptions(sysArgs, Seq("JOB_NAME").toArray)
    Job.init(args("JOB_NAME"), glueContext, args.asJava)
    // @type: DataSource
    // @args: [database = "raw-tickers-oregon", table_name = "spark_delivery_2_1", transformation_ctx = "datasource0"]
    // @return: datasource0
    // @inputs: []
    val datasource0 = glueContext.getCatalogSource(database = "raw-tickers-oregon", tableName = "spark_delivery_2_1", redshiftTmpDir = "", transformationContext = "datasource0").getDynamicFrame()
    // @type: ApplyMapping
    // @args: [mapping = [("exchangeid", "int", "exchangeid", "int"), ("data", "struct", "data", "struct")], transformation_ctx = "applymapping1"]
    // @return: applymapping1
    // @inputs: [frame = datasource0]
    val applymapping1 = datasource0.applyMapping(mappings = Seq(("exchangeid", "int", "exchangeid", "int"), ("data", "struct", "data", "struct")), caseSensitive = false, transformationContext = "applymapping1")
    // @type: DataSink
    // @args: [connection_type = "s3", connection_options = {"path": "s3://spark-ticker-oregon/target", "compression": "gzip"}, format = "json", transformation_ctx = "datasink2"]
    // @return: datasink2
    // @inputs: [frame = applymapping1]
    val datasink2 = glueContext.getSinkWithFormat(connectionType = "s3", options = JsonOptions("""{"path": "s3://spark-ticker-oregon/target", "compression": "gzip"}"""), transformationContext = "datasink2", format = "json").writeDynamicFrame(applymapping1)
    Job.commit()
  }
}

以及构建。sbt我已经开始为本地构建做准备:

name := "aws-glue-scala"

version := "0.1"

scalaVersion := "2.11.12"

updateOptions := updateOptions.value.withCachedResolution(true)

libraryDependencies += "org.apache.spark" %% "spark-core" % "2.2.1"

AWS Glue Scala API的文档似乎概述了AWS Glue Python库中提供的类似功能。那么,也许只需要下载并构建PySpark AWS Glue库并将其添加到类路径上?可能是因为Glue python库使用Py4J。

共有3个答案

宗政浩慨
2023-03-14

作为一种解决方法,您可以从S3下载jar。S3 URI是s3://aws-geger-jes-prod-us-east-1-资产/etl/jars/glue-assembly.jar

看见https://docs.aws.amazon.com/glue/latest/dg/dev-endpoint-tutorial-repl.html

罗渝
2023-03-14

不幸的是,没有可用于Scala胶水API的库。已经联系了亚马逊支持人员,他们知道这个问题。但是,他们没有提供任何用于交付API jar的ETA。

傅阿苏
2023-03-14

@frederic给出了一个非常有用的提示,可以从s3获取依赖项://aws-geger-jes-prod-us-east-1-Asset/etl/jars/glue-assembly.jar

不幸的是,这一版本的胶水组装。jar已经过时,它为versoin 2.1带来了火花。如果您正在使用向后兼容的功能,这很好,但是如果您依赖最新的spark版本(可能还有最新的glue功能),您可以从glue-devendpoint的/usr/share/aws/glue/etl/jars/glue-assembly下获得适当的jar。jar

如果您有一个名为“我的开发endpoint”的开发endpoint,您可以从中复制当前jar:

export DEV_ENDPOINT_HOST=`aws glue get-dev-endpoint --endpoint-name my-dev-endpoint --query 'DevEndpoint.PublicAddress' --output text`

scp -i dev-endpoint-private-key \
glue@$DEV_ENDPOINT_HOST:/usr/share/aws/glue/etl/jars/glue-assembly.jar .
 类似资料:
  • 问题内容: Kubernetes似乎只不过是将容器部署到集群云中。似乎没有碰到的是开发和暂存环境(或类似环境)。 在开发过程中,您希望通过一些重要更改尽可能接近生产环境: 本地部署(或至少在 您只有您可以访问的地方 ) 在页面刷新时使用 最新的源代码 (假设它是一个网站;理想情况下,在本地文件保存上页面自动刷新,如果您挂载源代码并使用诸如Yeoman之类的东西就可以完成)。 同样,人们可能希望非公

  • - Getting the Code To download all of the code, clone the eos repository and its submodules. git clone https://github.com/EOSIO/eos --recursive If a repository is cloned without the --recursive flag,

  • 如何为JDK8开发设置IntelliJ IDEA环境?我正在运行IntelliJ IDEA 2017.1.3社区版。 在整个IDE中为Java设置了各种设置,我不时地找到所有隐藏的地方并将其设置好。我需要偶尔在JDK6和JDK8开发之间切换,所以这并不是重新安装和选择JDK8来做所有的事情那么简单。我需要找到IDE中的所有开关,以便能够可靠地在两个设置之间切换(并向其他人演示如何这样做)。 nul

  • 使用 Online Editor 对 Weex 尝鲜是一个不错的选择,但如果你想更专业的开发 Weex,本节会教你如何搭建本地开发环境进行 Weex 开发。 安装依赖 Weex 官方提供了weex-cli 的脚手架工具来辅助开发和调试。 首先,你需要 Node.js 和 Weex CLI。 安装 Node.js 方式多种多样,最简单的方式是在 Node.js 官网 下载可执行程序直接安装即可。 更

  • 如果你已经有了 Maven 的开发环境,那你可以跳过本节。 本书例子需要 JDK 和 Apache Maven,都可以免费下载到。 1.安装配置 JDK 建议用 JDK 7+ 2.下载 IDE JAVA 的 IDE 很多,主流的有 Eclipse: http://www.eclipse.org NetBeans: http://www.netbeans.org Intellij Idea Comm

  • 在本章中,我们将演示如何将Firebase添加到现有的应用程序,要安装Firebase,首先需要NodeJS。 如果您还没有安装好Firebase,请从下表中的链接中下载安装。 NodeJS和NPM安装 - http://www.yiibai.com/nodejs/nodejs_environment_setup.html 第1步 - 创建Firebase帐户 可以在这里创建一个Firebase帐