有没有什么方法可以在一个pyspark脚本中从10个不同的模式中提取数据?

kognpnkq  于 2021-05-31  发布在  Hadoop
关注(0)|答案(1)|浏览(377)

我在SQLServer中有一些数据,它们存储在10种不同的模式中。尽管所有模式中的表结构都是相同的。有什么方法可以在一个pyspark脚本中提取所有的数据吗?另一种方法是为10个模式创建10个Dataframe,然后合并所有Dataframe,这需要我对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个不同的模式,然后做联合。
我要找的是在一个/所需的Dataframe中收集所有数据,方法是点击db一次,可能是使用for循环或类似的方法。
注意:不能使用sqoop,因为我必须创建10个不同的sqoop脚本(根据我们的架构)。
请帮忙。

bgibtngc

bgibtngc1#

您可以在sqlserver本身上执行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()

相关问题