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



我有以下代码,将用于将hadoop环境与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()

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

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

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)

示例属性文件

火花。DB_DRIVER com.teradata.jdbc.TeraDriver

火花。JDBC_URL jdbc:teradata://teradata-dns-sysa.fg.rbc.com

火花。DB_USER用户标识

火花。DB_PASS密码

火花提交命令

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

最新更新