将路径文件设置为参数在python pyspark中不起作用

问题描述

我想运行一个代码,在其中可以使用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个步骤:

  1. 将数据读入数据框
  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而不是数据帧。