python—在另一个Dataframe中测试一个Dataframe

6tdlim6h  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(384)

我有一个pysparkDataframedf:

A    B     C
E00  FT   AS
E01  FG   AD
E02  FF   AB
E03  FH   AW
E04  FF   AQ
E05  FV   AR   
E06  FD   AE

另一个较小的pysparkDataframe,但有3行具有相同的值,df2:

A    B    C
Null QW   Null
QA   Null Null
E03  FH   AW
E04  FF   AQ
E05  FV   AR
Null Null Null

pyspark中有没有一种方法可以从df2中的行和df中的行创建第三个布尔Dataframe?例如:

A     B      C
False  False  False
False  False  False
False  False  False
True   True   True
True   True   True
True   True   True
False  False  False

非常感谢。

70gysomp

70gysomp1#

你可以做一个左连接和分配 False 如果所有列从 df2 为空:

import pyspark.sql.functions as F

result = df1.alias('df1').join(
    df2.alias('df2'),
    F.least(*[F.expr(f'df1.{c} = df2.{c}') for c in df1.columns]), 
    'left'
).select(
    [
        (~F.greatest(*[F.col(f'df2.{c2}').isNull() for c2 in df2.columns])).alias(c)
        for c in df1.columns
    ]
)

result.show()
+-----+-----+-----+
|    A|    B|    C|
+-----+-----+-----+
|false|false|false|
|false|false|false|
|false|false|false|
| true| true| true|
| true| true| true|
| true| true| true|
|false|false|false|
+-----+-----+-----+

相关问题