[英]How to use properties in spark scala maven project
i want to include properties file explicitly and include it in spark code , instead of hardcoding directly in spark code with all credentials. 我想显式地包含属性文件,并将其包含在spark代码中,而不是使用所有凭据直接在spark代码中进行硬编码。 i am trying following approach but not able to do, AppContext is not able to be resolved.
我正在尝试以下方法,但无法执行,AppContext无法解决。 please guide me how to achieve this.
请指导我如何实现这一目标。
CASSANDRA_HOST1=127.0.0.133
CASSANDRA_PORT1=9042
CASSANDRA_USER1=usr1
CASSANDRA_PASS1=pas2
DataMigration.cassandra.keyspace1=demo2
DataMigration.cassandra.table1= data1
CASSANDRA_HOST2=
CASSANDRA_PORT2=9042
CASSANDRA_USER2=usr2
CASSANDRA_PASS2=pas2
D.cassandra.keyspace2=kesp2
D.cassandra.table2= data2
DataMigration.DifferencedRecords.output.path1=C:/spark_windows_proj/File1.csv
DataMigration.DifferencedRecords.output.path2=C:/spark_windows_proj/File1.parquet
----------------------------------------------------------------------------------
DM.scala
import org.apache.spark.sql.SparkSession
import org.apache.hadoop.mapreduce.v2.app.AppContext
object Data_Migration {
def main(args: Array[String]) {
val host1: String = AppContext.getProperties().getProperty("CASSANDRA_HOST1")
val port1 = AppContext.getProperties().getProperty("CASSANDRA_PORT1").toInt
val keySpace1: String = AppContext.getProperties().getProperty("DataMigration.cassandra.keyspace1")
val DataMigrationTableName1: String = AppContext.getProperties().getProperty("DataMigration.cassandra.table1")
val username1: String = AppContext.getProperties().getProperty("CASSANDRA_USER1")
val pass1: String = AppContext.getProperties().getProperty("CASSANDRA_PASS1")
val host2: String = AppContext.getProperties().getProperty("CASSANDRA_HOST2")
val port2 = AppContext.getProperties().getProperty("CASSANDRA_PORT2").toInt
val keySpace2: String = AppContext.getProperties().getProperty("DataMigration.cassandra.keyspace2")
val DataMigrationTableName2: String = AppContext.getProperties().getProperty("DataMigration.cassandra.table2")
val username2: String = AppContext.getProperties().getProperty("CASSANDRA_USER2")
val pass2: String = AppContext.getProperties().getProperty("CASSANDRA_PASS2")
val Result_csv: String = AppContext.getProperties().getProperty("DataMigration.DifferencedRecords.output.path1")
val Result_parquet: String = AppContext.getProperties().getProperty("DataMigration.DifferencedRecords.output.path2")
val sc = AppContext.getSparkContext()
val spark = SparkSession
.builder() .master("local")
.appName("ABC")
.config("spark.some.config.option", "some-value")
.getOrCreate()
val df_read1 = spark.read
.format("org.apache.spark.sql.cassandra")
.option("spark.cassandra.connection.host",host1)
.option("spark.cassandra.connection.port",port1)
.option( "spark.cassandra.auth.username",username1)
.option("spark.cassandra.auth.password",pass1)
.option("keyspace",keySpace1)
.option("table",DataMigrationTableName1)
.load()
I would rather pass the properties explicitly by passing the --properties-file
option to the spark-submit
when submitting the job. 我宁愿通过在提交作业时将
--properties-file
选项传递给spark-submit
来显式传递属性。
The AppContext won't necessary work for all submission types, while passing config file should work everywhere. AppContext不一定适用于所有提交类型,而传递配置文件应该在任何地方都有效。
Edit: For local usage without spark-submit, you can simply use the standard Properties
class, loading it from the resources and get access to properties. 编辑:对于本地使用而无需提交火花,您可以简单地使用标准的
Properties
类,从资源中加载它并获得对属性的访问。 You only need to put property file into src/main/resources
instead of src/test/resources
that is included into classpath only for tests. 您只需要将属性文件放入
src/main/resources
而不是仅将类文件中包含的src/test/resources
用于测试即可。 The code is something like: 代码类似于:
val props = new Properties
props.load(getClass.getClassLoader.getResourceAsStream("file.props"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.