PySparkのexceptAllとsubtractの違い

ロウ
2022-08-26
ロウ
2022-08-26

はじめに

PySparkのexceptAllとsubtractは、一方のDataFrameにはあるが他方のDataFrameにはない行を返します。 今回はexceptAllとsubtractの違いを調べてみた。

  • exceptAllは重複する行を保持する。
  • subtractは重複する行を削除する。 

検証コード

```
# DataFrame df1を作成
data1 = [("Alice", 20), ("James", 25), ("Maria", 30), ("Alice", 20)]
df1 = spark.createDataFrame(data1, ["name", "age"])
df1.show()
# 結果:
# +-----+---+
# | name|age|
# +-----+---+
# |Alice| 20|
# |James| 25|
# |Maria| 30|
# |Alice| 20|
# +-----+---+

# DataFrame df2を作成
data2 = [("Alice", 20), ("Michael", 21), ("Maria", 22)]
df2 = spark.createDataFrame(data2, ["name", "age"])
df2.show()
# 結果:
# +-------+---+
# |   name|age|
# +-------+---+
# |  Alice| 20|
# |Michael| 21|
# |  Maria| 22|
# +-------+---+

df = df1.exceptAll(df2)
df.show()
# 結果:
# +-----+---+
# | name|age|
# +-----+---+
# |Alice| 20|
# |James| 25|
# |Maria| 30|
# +-----+---+

df = df1.subtract(df2)
df.show()
# 結果:
# +-----+---+
# | name|age|
# +-----+---+
# |James| 25|
# |Maria| 30|
# +-----+---+
```