需要使用Pyspark连接Teradata的解决方案

时间:2019-02-05 13:46:41

标签: pyspark teradata

我有一个下面的代码,该代码将用于将hadoop env与Teradata连接。

sc = spark.sparkContext
from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)
df = sqlContext.read.format("jdbc").options(url="jdbc:teradata://teradata-dns-sysa.fg.rbc.com",driver="com.teradata.jdbc.TeraDriver",dbtable="table",user="userid",password="xxxxxxxx").load()

现在,不同用户的用户名和密码不同。因此,正在寻找一种解决方案,可以将凭据存储在文件中的安全位置,并且代码仅引用文件中的数据(用户名和密码)

1 个答案:

答案 0 :(得分:0)

在这里您可以使用属性文件,在其中可以将所需的用户ID和密码存储在文件中。运行spark-submit命令时,可以在命令中使用自变量参数-properties-file file_name 引用属性文件。下面是相同的示例代码。

from pyspark.sql import SparkSession

spark = SparkSession.builder \
        .appName("Teradata Connect") \
        .getOrCreate()

sc = spark.sparkContext

DB_DRIVER = sc._conf.get('spark.DB_DRIVER')

JDBC_URL = sc._conf.get('spark.JDBC_URL')

DB_USER = sc._conf.get('spark.DB_USER')

DB_PASS = sc._conf.get('spark.DB_PASS')

jdbcDF = (spark.read.format("jdbc").option("driver", DB_DRIVER)
   .option("url", JDBC_URL)
   .option("dbtable", "sql_query")
   .option("user", DB_USER)
   .option("password", DB_PASS)
   .load())

jdbcDF.show(10)

样本属性文件

  

spark.DB_DRIVER com.teradata.jdbc.TeraDriver

     

spark.JDBC_URL jdbc:teradata://teradata-dns-sysa.fg.rbc.com

     

spark.DB_USER用户ID

     

spark.DB_PASS密码

火花提交命令

spark2-submit --master yarn \
              --deploy-mode cluster \
              --properties-file $CONF_FILE \
                pyspark_script.py