如何通过从另一个表中选择列动态创建模式-PySpark

时间:2019-01-15 01:22:34

标签: pyspark

我试图从动态值中选择列,该动态值是表中的列名,并且基于所选的列,我试图构建新表

我根据column的值拆分数据框架,对于每次拆分,我尝试创建一个单独的架构。

listids = [x for x in tab1.select("Val").distinct().collect()]

dfArray = [tab1.where(tab1.Val == x) for x in listids]

def getdf(df):
     id=df.select("Val").distinct().flatMap(lambda x: x).collect()
     samdf=tab2.where(F.lit(id[0])==1)
     return samdf

[getdf(df) for df in dfArray] 

Table 1                                     TABLE 2
-------------------------------       -----------------------------------
ColNames   |   A      |B              col1   | col 2  | col3  | col4 | Val 
-------------------------------       ------------------------------------  

col1            1       1               p        a       x        r      A 
col2                                    q        b       y        s      A 
col3            1                       r        c       z        t      B 
col4            1       1       

基于A和B的列,我希望获得2个输出表,

for A                                  for B 

col1 | col3 | col4                     col1 | col4 
-------------------                   ------------- 
 p      x      r                        r       t    
 q      y      x 

我设法在数据框中选择A和B的列,但是我无法将该数据框转换为架构并无法从表2中获取数据

表1是一个参考表,我可以更改其架构以适合该解决方案。我尝试对其进行转置以对其进行优化,但没有帮助。

0 个答案:

没有答案