如何从 Java Spark 应用程序中读取 app.properties 文件
Posted
技术标签:
【中文标题】如何从 Java Spark 应用程序中读取 app.properties 文件【英文标题】:How to read app.properties file from Java Spark application 【发布时间】:2021-02-14 18:04:12 【问题描述】:我实现了 Java Spark 应用程序,我使用 spark-submit 命令在 EMR 集群上运行该应用程序。 我想传递我在应用程序中使用的 app.properties。 app.properties 如下所示:
local_fetcher = false
local_storage = false
local_db = true
.
.
.
我希望能够在我的应用程序中获取这些数据。 我的问题是:
-
app.properties 应该放在哪里?
如何在我的 Spark 应用程序中读取它的内容?
我应该能够从驱动程序和执行程序中读取它吗?
我尝试使用--properties-file
标志,但我知道它会覆盖默认的 Spark 配置,这不是我想要的。
我看到我可能会使用--file
标志,但不明白该文件应该放在哪里以及如何在我的应用程序中读取它。
【问题讨论】:
【参考方案1】:第一个选项:--files
--files FILES 逗号分隔的文件列表,放置在每个执行器的工作目录中。这些文件在执行器中的文件路径可以通过 SparkFiles.get(fileName) 访问。
spark-submit --files /path/to/app.properties /path/to/your/fat/jar.jar
您可以使用SparkFiles获取上传文件的确切位置。
第二个选项:getResourceAsStream
将您的 app.properties 放入作业的 JAR 文件中,然后像这样加载它:
val appPropertiesStream = scala.io.Source.fromInputStream(
classOf[yourObject].getClassLoader.getResourceAsStream("/app.properties")
val appPropertiesString = scala.io.Source.fromInputStream(appPropertiesStream ).mkString
(请注意“app.properties”之前的正斜杠,据我所知它很重要)
【讨论】:
奥列格感谢您的评论。如果我理解正确的话,在第一个选项中,驱动程序将无权访问此文件。那么第二个选项呢?以上是关于如何从 Java Spark 应用程序中读取 app.properties 文件的主要内容,如果未能解决你的问题,请参考以下文章
Spark steaming 从 Kafka 读取并在 Java 中应用 Spark SQL 聚合
从Greenplum上的表中读取数据时,如何在Spark-jdbc应用程序的选项“dbtable”中指定子查询? [复制]
在 java spark 中从 REST API 读取 csv
Apache Spark Java - 如何遍历行数据集并删除空字段