如何使用spark sql获取多个表

Aks*_*kar 2 python pyspark-sql

我正在使用 pyspark 从 mysql 中获取数据,其中只有一个表。我想从 mysql db 中获取所有表。不想一次又一次地调用 jdbc 连接。看下面的代码

是否可以简化我的代码?先感谢您

url = "jdbc:mysql://localhost:3306/dbname"
table_df=sqlContext.read.format("jdbc").option("url",url).option("dbtable","table_name").option("user","root").option("password", "root").load()
sqlContext.registerDataFrameAsTable(table_df, "table1")

table_df_1=sqlContext.read.format("jdbc").option("url",url).option("dbtable","table_name_1").option("user","root").option("password", "root").load()
sqlContext.registerDataFrameAsTable(table_df_1, "table2")
Run Code Online (Sandbox Code Playgroud)

Ste*_*ven 6

您需要以某种方式获取 mysql 中的表列表。要么找到一些 sql 命令来执行此操作,要么手动创建一个包含所有内容的文件。

然后,假设您可以在 python 中创建一个表名列表tablename_list,您可以像这样简单地循环它:

url = "jdbc:mysql://localhost:3306/dbname"
reader = (
    sqlContext.read.format("jdbc")
    .option("url", url)
    .option("user", "root")
    .option("password", "root")
)
for tablename in tablename_list:
    reader.option("dbtable", tablename).load().createTempView(tablename)
Run Code Online (Sandbox Code Playgroud)

这将创建一个具有相同表名的临时视图。如果你想要另一个名字,你可以tablename_list用 tuples 列表更改首字母(tablename_in_mysql, tablename_in_spark)