【问题标题】:Extract AWS Glue credentials from created glue client Scala从创建的胶水客户端 Scala 中提取 AWS Glue 凭证
【发布时间】:2020-08-13 18:29:37
【问题描述】:

我正在尝试提取引用此question 的嵌入式连接凭据。 但我收到以下错误。

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.types._  //import everything from the package    
import org.apache.spark.sql.expressions.{Window => W} 
import org.apache.spark.sql.{functions => F}
import org.apache.spark.SparkContext
import com.amazonaws.services.glue.GlueContext
import com.amazonaws.services.glue.util.GlueArgParser 

import com.amazonaws.services.glue.DynamicFrame

import com.amazonaws.regions.Regions
import com.amazonaws.services.glue.model._

import com.amazonaws.services.glue.{AWSGlue, AWSGlueClient}
import scala.collection.JavaConverters.{mapAsJavaMapConverter, seqAsJavaListConverter}
import com.amazonaws.services.sagemaker.sparksdk.IAMRole

val sc = spark.sparkContext
val glueContext: GlueContext = new GlueContext(sc)

val region = Regions.fromName("us-east-1")

// Function to create AWS glue client
def glueClient(region: Regions):
AWSGlue = AWSGlueClient.builder().withRegion(region).build()

val glue = glueClient(region =region)

glue.getConnection("{Name: name-of-embedded-connection,HidePassword: False}")

遇到错误::71: error: type mismatch;找到:String("{Name: preprod-samtec-redw,HidePassword: False}") 需要: com.amazonaws.services.glue.model.GetConnectionRequest gum.getConnection("{Name: name-of-embedded-connection,HidePassword: False}")

【问题讨论】:

    标签: java scala connection aws-glue aws-sdk-java-2.0


    【解决方案1】:

    如错误所示,您需要向getConnection 方法提供GetConnectionRequest 对象,类似于:

    import org.apache.spark.sql.SparkSession
    import org.apache.spark.sql.types._  //import everything from the package    
    import org.apache.spark.sql.expressions.{Window => W} 
    import org.apache.spark.sql.{functions => F}
    import org.apache.spark.SparkContext
    import com.amazonaws.services.glue.GlueContext
    import com.amazonaws.services.glue.util.GlueArgParser 
    
    import com.amazonaws.services.glue.DynamicFrame
    
    import com.amazonaws.regions.Regions
    import com.amazonaws.services.glue.model._
    
    import com.amazonaws.services.glue.{AWSGlue, AWSGlueClient}
    import scala.collection.JavaConverters.{mapAsJavaMapConverter, seqAsJavaListConverter}
    import com.amazonaws.services.sagemaker.sparksdk.IAMRole
    
    val sc = spark.sparkContext
    val glueContext: GlueContext = new GlueContext(sc)
    
    val region = Regions.fromName("us-east-1")
    
    // Function to create AWS glue client
    def glueClient(region: Regions):
    AWSGlue = AWSGlueClient.builder().withRegion(region).build()
    
    val glue = glueClient(region =region)
    
    val getConnectionRequest: GetConnectionRequest = new GetConnectionRequest()
      .withName("name-of-embedded-connection")
      .withHidePassword(false)
    
    val getConnectionResult: GetConnectionResult =  glue.getConnection(getConnectionRequest)
    
    val connection: Connection = getConnectionResult.getConnection()
    
    val connectionProperties = connection.getConnectionProperties()
    
    // Now you can extract as many properties as you need (see https://github.com/aws/aws-sdk-java/blob/2d73c9847a327eea2f673a4cd2b3449e433649e5/aws-java-sdk-glue/src/main/java/com/amazonaws/services/glue/model/Connection.java#L687)
    // For instance, the username or password
    val username = connectionProperties.get("USERNAME")
    val password = connectionProperties.get("PASSWORD")
    

    【讨论】:

    • 我收到以下错误:<console>:1: error: identifier expected but 'new' found. val connectionRequest: new GetConnectionRequest() ^
    • 抱歉,Jay,我忘了包含变量的类型。你现在可以试试吗?你也可以试试val connectionRequest = new GetConnectionRequest() .withName("name-of-embedded-connection") .withHidePassword(false)
    • 好杰!!我很高兴听到这个答案很有帮助。
    • 我更新了我的答案,我认为是复制您的 Python 代码所需的代码(请注意,我正在手动编辑它,希望我没有犯任何错误)
    • 谢谢,Jay 不用担心,我精通 Python。是的,我认为你只需要获取像val username = connectionProperties.get("USERNAME") 这样的值。我不明白你对 JSON 的意思:它与你在 python 中处理结果的方式有关吗?在 Java/Scala 中,您有一个 Map,类似于 Python 字典,您可以获取与某个键对应的值,并将其作为 get 方法的参数传递。实际上,在您的代码中,您正在处理一个 Python 字典,不是吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-04
    • 2021-01-12
    • 1970-01-01
    • 2015-04-18
    相关资源
    最近更新 更多