我正在使用typesafe配置工厂将配置加载到scala应用程序中。我不想将配置文件包含到jar中,而是从外部hdfs文件系统加载它们。但是,我找不到从hadoop获得的fsdatainputstream对象加载配置的简单方法:
//get HDFS file
val hadoopConfig: Configuration = sc.hadoopConfiguration
val fs: FileSystem = org.apache.hadoop.fs.FileSystem.get(hadoopConfig)
val file: FSDataInputStream = fs.open(new Path("hdfs://SOME_URL/application.conf"))
//read config from hdfs
val config: Config = ConfigFactory.load(file.readUTF())
但是,这会抛出一个eofexception。有没有一种简单的方法将fsdatainputstream对象转换为所需的java.io.file?我发现了从fsdatainputstream到fileinputstream的转换,但是对于这样一个简单的任务来说,这将是相当麻烦的。
3条答案
按热度按时间dgiusagp1#
您应该能够使用以下代码在hdfs中加载.conf文件:
请记住.conf文件应该放在与应用程序文件相同的目录下(例如spark中的jar文件)。
zdwk9cvp2#
以下是我使用spark应用程序所做的:
现在在代码中,使用
希望对你有帮助。
jgovgodb3#
使用
ConfigFactory.parseReader
应该有效(但我还没有测试):