【问题标题】:Fetch table size from dynamodb using scala使用 scala 从 dynamodb 获取表大小
【发布时间】:2020-11-05 10:21:38
【问题描述】:

您好,我正在使用以下代码使用 Scala 从 DynamoDB 中获取各种内容。 我一直在获取表格描述。

我在构建项目时收到以下错误:

无法在类 dynDBMetadata 中访问类 DescribeTableRequest 中的构造函数 DescribeTableRequest val tableDescription = ddbClient.describeTable(new DescribeTableRequest("Music"))

package dynDBFetchAPIs

import software.amazon.awssdk.auth.credentials.{AwsBasicCredentials, StaticCredentialsProvider}
import software.amazon.awssdk.http.apache.ApacheHttpClient
import software.amazon.awssdk.regions.Region
import software.amazon.awssdk.services.dynamodb.DynamoDbClient
import software.amazon.awssdk.services.dynamodb.model.DescribeTableRequest

class dynDBMetadata {

  def dynDBMetadataInit(): Unit = {
    regionDetails()
  }

  def regionDetails(): Unit = {
    val ddbClient = getDynDBClient()
    val region = Region.US_EAST_1
    var tableCount: Int = 0
    var tableSize: Map[String, Int] = null
    var regionSize: Int = 0

    val tableList = ddbClient.listTables().tableNames()

    val tableIterator = tableList.iterator()
    while (tableIterator.hasNext) {
      tableCount = tableCount + 1
      tableIterator.next()
    }

    val descTabReq = new DescribeTableRequest("Music")
    val tableDescription = ddbClient.describeTable(descTabReq)
    println(tableDescription)

    println("Region of AWS DynamoDB: " + region)
    println("List of DynamoDB Tables: " + tableList)
    println("Count of DynamoDB Tables: " + tableCount)
  }

  private def getDynDBClient(): DynamoDbClient = {
    var awsBasicCredentials: AwsBasicCredentials = null
    var dynamoDbClient: DynamoDbClient = null
    try {
      val accessKey = "****************************"
      val secretKey = "****************************"
      awsBasicCredentials = AwsBasicCredentials.create(accessKey, secretKey)

      dynamoDbClient = DynamoDbClient.builder()
        .region(Region.US_EAST_1)
        .credentialsProvider(StaticCredentialsProvider.create(awsBasicCredentials))
        .httpClient(ApacheHttpClient.builder().build())
        .build();

    } catch {
      case e: Exception => {
        e.printStackTrace()
      }
    }
    dynamoDbClient
  }

}

为什么我使用 Scala 时给定的构造函数无法访问?

build.sbt 的内容

name := "dynamodb"
version := "0.1"
scalaVersion := "2.11.12"
scalacOptions := Seq("-target:jvm-1.8")

libraryDependencies ++= Seq(
  "software.amazon.awssdk" % "dynamodb" % "2.15.1"
)

【问题讨论】:

标签: scala amazon-dynamodb


【解决方案1】:

我相信这是因为类 software.amazon.awssdk.services.dynamodb.model.DescribeTableRequest 没有主构造函数。

你应该像这样使用构建器创建

 val tableRequest = DescribeTableRequest.builder
            .tableName(tableName)
            .build

com.amazonaws.services.dynamodbv2.model.DescribeTableRequest 确实有一个主构造函数。所以,也许你刚刚包含了一个错误的依赖项。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-14
    相关资源
    最近更新 更多