从Scala中的config读取值

时间:2015-03-10 14:47:02

标签: file scala

在Scala中,如果我有以下配置:

id = 777
username = stephan
password = DG#%T@RH

想法是打开一个文件,将其转换为字符串,对其执行getLines并根据左侧键获取右侧值。将常量配置值读入我的应用程序的最佳代码是什么?

客户使用情况:val username = config.get("username")

3 个答案:

答案 0 :(得分:22)

最好的方法是使用.conf文件和ConfigFactory,而不是自己完成所有文件解析:

import java.io.File
import com.typesafe.config.{ Config, ConfigFactory }

// this can be set into the JVM environment variables, you can easily find it on google
val configPath = System.getProperty("config.path")

val config = ConfigFactory.parseFile(new File(configPath + "myFile.conf"))

config.getString("username")

我通常会使用scalaz Validation进行parseFile操作以防文件不存在,但如果您不这样做,则只需使用try/catch即可知道如何使用它。

答案 1 :(得分:0)

您可以在json文件(我将其命名为config.json)中配置以下值

{
  "id": "777",
  "username": "stephan",
  "password": "DG#%T@RH"
}

现在,您可以将此json文件存储在hdfs位置,并在scala中使用spark从hdfs位置读取此文件,并读取以下配置值:

val configData = spark.read.option("multiline",true).json("/tmp/user/config.json")
val id = configData.select("id").collect()(0)  
val username = configData.select("username").collect()(0)  
val password = configData.select("password").collect()(0)

在代码的第一行中,您需要使用带有multiline = true参数的option选项,因为您的json文件将在新行中包含每个值。如果您不使用它,则会出现错误,提示 _corrupt_record:字符串

答案 2 :(得分:0)

如果您的Spark版本低于2.2,则首先将JSON文件内容转换为JSON字符串,即,将文件内容转换为单个字符串并将其加载到HDFS位置。

示例JSON:

{ 
  "planet" : "Earth",
  "continent" : "Antarctica"
}

转换为:

{ "planet" : "Earth", "continent" : "Antarctica"}

接下来,要访问数据,请创建一个数据框:

val dataDF = spark.read.format("json").load("<HDFS location>")
val planet = dataDF.select("planet").collect(0).mkString("")

希望这有助于Spark 2.1和更少的用户。