我试图从每个表中获取所有列,并通过循环迭代将其存储在单个数据帧中。 在下面的代码中,run_query 是一个启动 sql 会话的函数。
def run_query(sql):
query = <teradata driver details to connect to the database>
return query
source = ['login','signup','alert']
output=[]
for i in range(len(source)):
q = "select * from {} sample 1".format(source[i])
var = run_query(q)
output.append(var)
print(output)
我总是只得到第一个表格列,但我需要所有 3 个表格列。
预期输出:所有 3 个表列数据的串联。
表1 一、二
表2 c , d
table3 e, f
输出表 桌子 a、b、c、d、e、f
答案 0 :(得分:0)
您有三个表,并且分别从这些表中读取数据。 您可以为每个单独的表创建数据帧,然后将您将从其他表中获取的附加列附加到具有某些默认值的数据帧,然后将所有三个数据帧合并以获得最终的单个数据帧。 在这里,我给出了一个默认值 0,但您可以根据您的要求和用例给出任何类似 null 的值。
df1 = table1 data (Columns a,b)
df2 = table2 data (Columns c,d)
df3 = table3 data (Columns e,f)
from pyspark.sql.functions import *
finaldf1 = df1.withColumn("c",lit(0))
.withColumn("d", lit(0))
.withColumn("e", lit(0))
.withColumn("f",lit(0))
finaldf2 = df2.withColumn("a",lit(0))
.withColumn("b", lit(0))
.withColumn("e",lit(0))
.withColumn("f",lit(0))
.select("a","b","c","d","e","f") --doing select to maintain order of columns for doing union.
finaldf3 = df3.withColumn("c",lit(0))
.withColumn("d", lit(0))
.withColumn("a", lit(0))
.withColumn("b",lit(0))
.select("a","b","c","d","e","f")
finaldf = finaldf1.union(finaldf2).union(finaldf3)
您可以执行 finaldf.printSchema 来获取最终数据帧的架构。