问题描述
我想运行一个代码,在其中可以使用jdbc驱动程序提取数据并将其保存到文件路径中。它成功摄取了数据,但保存功能没有起作用。我知道我们可以使用这样的代码来保存数据:
a.write.mode("overwrite").parquet("test/partition_test.parquet")
有什么方法可以将文件路径设置为参数?我试过像下面那样设置参数,但是没有用。
我的代码:
def ingest(spark,db_url,tablename,username,password,destination,driver,save_format="parquet"):
a = spark.read.format("jdbc").option("url",db_url).option("dbtable",tablename).option("user",username).option("password",password).option("path",destination).option("driver",driver).load()
return a
ingest(spark,"jdbc:MysqL://192.168.122.1:3306/users","users","root","123456@h21","/path","com.MysqL.jdbc.Driver",save_format="parquet")
解决方法
您正在代码中混合两件事。您需要执行的步骤分为2个步骤:
- 将数据读入数据框
- 将数据帧写入文件
所以代码必须是这样的:
def ingest(spark,db_url,tablename,username,password,destination,driver,save_format="parquet"):
a = spark.read.format("jdbc").option("url",db_url)\
.option("dbtable",tablename).option("user",username)\
.option("password",password).option("driver",driver).load()
a.write.format(save_format).save(destination)
return a
此函数将返回数据帧,但是如果您只需要读取和写入数据,则可以返回None
而不是数据帧。