繁体   English   中英

通过spark和scala从AWS s3读取.conf文件

[英]Reading .conf file from AWS s3 through spark and scala

我能够从 AWS S3 加载文本文件,但在读取“.conf”文件时遇到问题。 得到错误

“线程“main”com.typesafe.config.ConfigException$Missing 中的异常:未找到键 'spark' 的配置设置”

斯卡拉代码:

val configFile1 = ConfigFactory.load( "s3n://<bucket_name>/aws.conf" )
configFile1.getString("spark.lineage.key")

这是我最终要做的,创建一个包装实用程序Config.scala

import java.io.File

import com.amazonaws.auth.DefaultAWSCredentialsProviderChain
import com.amazonaws.services.s3.{AmazonS3Client, AmazonS3URI}
import com.typesafe.config.{ConfigFactory, Config => TConfig}

import scala.io.Source

object Config {

  private def read(location: String): String = {
    val awsCredentials = new DefaultAWSCredentialsProviderChain()
    val s3Client = new AmazonS3Client(awsCredentials)
    val s3Uri = new AmazonS3URI(location)

    val fullObject = s3Client.getObject(s3Uri.getBucket, s3Uri.getKey)

    Source.fromInputStream(fullObject.getObjectContent).getLines.mkString("\n")
  }

  def apply(location: String): TConfig = {

    if (location.startsWith("s3")) {
      val content = read(location)
      ConfigFactory.parseString(content)
    } else {
      ConfigFactory.parseFile(new File(location))
    }
  }
}

使用创建的包装器

val conf: TConfig = Config("s3://config/path")

您可以使用为aws-java-sdk provided范围,因为它将在 EMR 集群中可用。

根据我的研究,我们只能通过 spark/scala 从 AWS S3 读取分隔符文件。 由于 .conf 文件属于 = 对,因此不可能。
唯一的方法是修改文件中数据的格式。

类型安全配置不支持从 S3 加载 .conf 文件,但您可以自己将 s3 文件作为字符串读取并传递给类型安全配置,如val conf = ConfigFactory.parseString(... .conf files as string ...)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM