У меня есть два кадра данных
- столбцы: ['q1', 'q2', 'q3', 'a1', 'a2']
- b столбцы: ['q1', 'q2', 'q3', 'b', 'b2']
a могут иметь некоторые ['q1', 'q2', 'q3'] не в b,b также может иметь некоторые ['q1', 'q2', 'q3'], не входящие в a.
Слияние означает, что если a имеет ['q1', 'q2', 'q3'] так же, как b, соедините строки, затем объедините левые строки. full outer join
такого не делает.
мой код пресудо выглядит следующим образом:
c = a.join(b, on= ['q1', 'q2', 'q3'], how='inner')
c = c.union(a.filter( ~a.withColumn('xxx', F.concat_ws('|', 'q1', 'q2', 'q3') ).isin(c.select(F.concat_ws('|', 'q1', 'q2', 'q3')) )
c = c.union(b.filter( ~b.withColumn('xxx', F.concat_ws('|', 'q1', 'q2', 'q3') ).isin(c.select(F.concat_ws('|', 'q1', 'q2', 'q3')) )
Но это очень неэффективно.
Есть ли лучший способ?