首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用spark sql获取多个表

如何使用spark sql获取多个表
EN

Stack Overflow用户
提问于 2019-02-02 21:57:47
回答 2查看 3K关注 0票数 2

我正在使用pyspark从mysql获取数据,它只用于一个表。我想从mysql数据库中获取所有表。不想一次又一次地调用jdbc连接。请参阅下面的代码

可以简化我的代码吗?提前谢谢你

代码语言:javascript
复制
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")
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-04 21:07:31

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

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

代码语言:javascript
复制
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)

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

票数 6
EN

Stack Overflow用户

发布于 2020-06-18 12:28:30

@Steven已经给出了一个完美的答案。正如他所说的,为了查找表名的Python列表,您可以使用:

代码语言:javascript
复制
#list of the tables in the server
table_names_list = spark.read.format('jdbc'). \
     options(
         url='jdbc:postgresql://localhost:5432/', # database url (local, remote)
         dbtable='information_schema.tables',
         user='YOUR_USERNAME',
         password='YOUR_PASSWORD',
         driver='org.postgresql.Driver'). \
     load().\
     filter("table_schema = 'public'").select("table_name")
#DataFrame[table_name: string]

# table_names_list.collect()
# [Row(table_name='employee'), Row(table_name='bonus')]

table_names_list = [row.table_name for row in table_names_list.collect()]
print(table_names_list)
# ['employee', 'bonus']

注意,这是在PostgreSQL中实现的。您可以轻松地更改urldriver参数。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54493740

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档