IDを相互にペアリングするデータフレームを作成しました。例えば
|First ID|Second ID|Concatenated column|
|--------|---------|-------------------|
|1111111111|2222222222|1111111111,2222222222|
|1111111111|1111111112|1111111111,1111111112|
|2222222222|1111111111|2222222222,1111111111|
私がやりたいのは、1番目と2番目のIDの値に関係なく、重複するペアをすべて削除することです。
これを行うための最良の方法として私が考えたのは、各行/ペアに同じ順序を使用して、両方が両方のIDを配置する連結列を作成することです。すなわち昇順
これは、(最初に来るIDに関係なく)すべての重複ペアを削除するための最良の方法ですか?その場合、指定された順序(昇順/降順)で列を連結するにはどうすればよいですか。
これまでのところ、次のコードを使用して、2つの列を連結する方法しか見つかりませんでした。
df= df.withColumn('joined_IDs',
sf.concat(sf.col('Id_1'),sf.lit(', '), sf.col('Id_2')))
ペアを削除するためのより洗練された方法があれば、それも知っておくと便利です。
ありがとう!
使用array_sort
してarray
。重複を削除する場合は、を使用しますdropDuplicates
。
df.show()
+---+---+
|id1|id2|
+---+---+
|111|222|
|111|112|
|222|111|
+---+---+
import pyspark.sql.functions as F
df2 = df.withColumn('ids', F.array_sort(F.array('id1', 'id2')))
df2.show()
+---+---+----------+
|id1|id2| ids|
+---+---+----------+
|111|222|[111, 222]|
|111|112|[111, 112]|
|222|111|[111, 222]|
+---+---+----------+
df3 = df2.dropDuplicates(['ids'])
df3.show()
+---+---+----------+
|id1|id2| ids|
+---+---+----------+
|111|222|[111, 222]|
|111|112|[111, 112]|
+---+---+----------+
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加