我在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脚本(根据我们的架构)。
请帮忙。
1条答案
按热度按时间bgibtngc1#
您可以在sqlserver本身上执行unionall操作,然后将数据返回spark,这样您只会对db执行一次。即使您尝试在模式中循环,仍然会多次碰到db。
所以可以这样创建查询
然后在spark jdbc中运行这个查询