python - 如何使用spark sql获取多个表

标签 python apache-spark-sql

我正在使用 pyspark 从 mysql 获取数据,该数据仅适用于一张表。我想从 mysql 数据库获取所有表。不想一次又一次的调用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")

最佳答案

您需要以某种方式获取 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)

这将创建一个具有相同表名的临时 View 。如果您想要其他名称,您可以使用元组列表(tablename_in_mysql, tablename_in_spark)更改初始tablename_list

关于python - 如何使用spark sql获取多个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54493740/

相关文章:

python - pyspark中聚合函数后如何保持列顺序一致

python - 用于登录的 django rest auth facebook 代码

python - 使用对数刻度标准化分类器分数以进行比较

python - 在Python中获取ISO 639(3字母代码)中的系统语言

python - 如何用Python接收Watson Speech to Text SDK的全部输出?

python - python 或 pyspark 中的条件语句

python - 如何使 pudb 中的命令行/解释器 Pane /窗口更大?

apache-spark - 应该如何配置spark sql来访问hive Metastore?

scala 未指定值参数

sql - 在spark中找到两个表之间最接近的时间