有啥方法可以让我在一个 pyspark 脚本中从 10 个不同的模式中提取数据?
Posted
技术标签:
【中文标题】有啥方法可以让我在一个 pyspark 脚本中从 10 个不同的模式中提取数据?【英文标题】:Is there any method through which i can pull data from 10 different schemas in one pyspark script?有什么方法可以让我在一个 pyspark 脚本中从 10 个不同的模式中提取数据? 【发布时间】:2020-05-19 07:42:31 【问题描述】:我在 SQL 服务器上有一些数据,这些数据存储在 10 个不同的模式中。虽然表结构在所有模式中都是相同的。有什么方法可以让我在一个 pyspark 脚本中提取所有数据? 一种替代方法是为 10 个模式创建 10 个数据框,然后合并所有,这将需要我访问 sql server 10 次。比如这样的:
df1 = spark.sql("""select id, name, address from schema_1.personal_details""") \
spark.read(db_details)
df2 = spark.sql("""select id, name, address from schema_2.personal_details""") \
spark.read(db_details)
df3 = spark.sql("""select id, name, address from schema_3.personal_details""") \
spark.read(db_details)
像这样,10个不同的schema,然后做union。
我正在寻找的是通过一次访问数据库来收集一个/所需数据帧中的所有数据,这可能是通过使用 for 循环或其他方式。
注意:不能使用 sqoop,因为我必须创建 10 个不同的 sqoop 脚本(根据我们的架构)。
请帮忙。
【问题讨论】:
【参考方案1】:您可以在 sql server 本身上执行 unionall 操作,然后将数据返回到 spark 中,这样您只需访问 db 一次。即使您尝试遍历模式,您仍然会多次访问 db。
所以你可以像这样创建查询
select id, name, address from schema_1.personal_details
union all
select id, name, address from schema_2.personal_details
union all
select id, name, address from schema_3.personal_details
and so on..
然后在 spark jdbc 中运行这个查询
spark.read.format("jdbc")
.option("url", jdbcUrl)
.option("query", yourUnionallQuery)
.load()
【讨论】:
以上是关于有啥方法可以让我在一个 pyspark 脚本中从 10 个不同的模式中提取数据?的主要内容,如果未能解决你的问题,请参考以下文章
有啥方法可以在 Linux/AIX 中从 ksh 更改进程名称?
有啥方法可以让 curl 连接并让我在输入时输入和发送身体片段?