使用PySpark DataFrameReader我正在尝试从RDS表读取并写入Redshift表。
我能够从csv读取并写入表,如下所示:
df = spark.read \
.format("com.databricks.spark.csv") \
.option("header", "true") \
.option("inferSchema", "true") \
.load(s3_source_location)
jdbcconf = glueContext.extract_jdbc_conf(GLUE_CONNECTION_NAME)
df.write.format("jdbc") \
.option("url", jdbcconf.get("url") + '/' + REDSHIFT_DATABASE + '?user=' + jdbcconf.get('user') + '&password=' + jdbcconf.get('password')) \
.option("dbtable", REDSHIFT_TABLE_NAME) \
.option("tempdir", args["TempDir"]) \
.partitionBy("Ingestion_Date") \
.mode("overwrite") \
.save()
但是,我想从Rs中读取,而不是从csv中读取,我尝试如下操作:
RDS_CONNECTION_NAME = args['GlueConnectionRDS']
RDS_DATABASE = args['RDSDatabase']
RDS_TABLE_NAME = args['RDSTable']
jdbcconf = glueContext.extract_jdbc_conf(RDS_CONNECTION_NAME)
df = spark.read.format("jdbc") \
.option("url", jdbcconf.get("url") + '/' + RDS_DATABASE + '?user=' + jdbcconf.get('user') + '&password=' + jdbcconf.get('password')) \
.option("dbtable", RDS_TABLE_NAME)
REDSHIFT_CONNECTION_NAME = args['GlueConnectionRedshift']
REDSHIFT_DATABASE = args['RedshiftDatabase']
REDSHIFT_TABLE_NAME = args['RedshiftTable']
jdbcconf = glueContext.extract_jdbc_conf(REDSHIFT_CONNECTION_NAME)
df.write.format("jdbc") \
.option("url", jdbcconf.get("url") + '/' + REDSHIFT_DATABASE + '?user=' + jdbcconf.get('user') + '&password=' + jdbcconf.get('password')) \
.option("dbtable", REDSHIFT_TABLE_NAME) \
.option("tempdir", args["TempDir"]) \
.mode("overwrite") \
.save()
从逻辑上讲,我希望它能正常工作,但是我肯定缺少有关DataFrameReader的知识。我收到一条错误消息:
AttributeError:“ DataFrameReader”对象没有属性“ write”。
如果我尝试通过.load()
调用和驱动程序进行读取,如下所示:
df = spark.read.format("jdbc") \
.option("url", jdbcconf.get("url") + '/' + RDS_DATABASE + '?user=' + jdbcconf.get('user') + '&password=' + jdbcconf.get('password') + '/') \
.option("dbtable", RDS_TABLE_NAME) \
.option("inferSchema", "true") \
.option("driver", 'org.postgresql.Driver') \
.load()
虽然我知道我的连接有效,但是却收到验证错误。 正确的做法是什么?