使用数据框在 pyspark 中进行列比较
columns comparison in pyspark using dataframes
我有一个数据框 DF1,它包含三列 city1、city2、distance。我想通过删除相同的行之一从 DF1 创建一个新的数据框 DF2
我正在尝试检查城市之间的距离。由于城市(A 和 B)或(B 和 A)将具有相同的距离。我需要删除其中一个
city1 city2 dist
A B 100
A C 200
B A 100
C B 200
所以在这里,需要删除第 1 行或第 3 行,因为它们被认为是相同的
预期输出
city1 city2 dist
A B 100
A C 200
C B 200
通过创建 array combined all columns
进行排序,然后使用 row_number
函数从 window.
Example:
df.show()
#using some sample records from post
#+-----+-----+----+
#|city1|city2|dist|
#+-----+-----+----+
#| A| B| 100|
#| A| C| 200|
#| B| A| 100|
#+-----+-----+----+
df1=df.withColumn("new_cnct",array_join(array_sort(array(col("city1"),col("city2"),col("dist"))),'')).\
withColumn("s_id",spark_partition_id())
from pyspark.sql import *
from pyspark.sql.window import *
w=Window.partitionBy("new_cnct").orderBy("s_id")
df1.withColumn("rn",row_number().over(w)).\
filter(col("rn") ==1).\
drop("rn","s_id","new_cnct").\
show(10,False)
#+-----+-----+----+
#|city1|city2|dist|
#+-----+-----+----+
#|A |B |100 |
#|A |C |200 |
#+-----+-----+----+
我有一个数据框 DF1,它包含三列 city1、city2、distance。我想通过删除相同的行之一从 DF1 创建一个新的数据框 DF2
我正在尝试检查城市之间的距离。由于城市(A 和 B)或(B 和 A)将具有相同的距离。我需要删除其中一个
city1 city2 dist
A B 100
A C 200
B A 100
C B 200
所以在这里,需要删除第 1 行或第 3 行,因为它们被认为是相同的
预期输出
city1 city2 dist
A B 100
A C 200
C B 200
通过创建 array combined all columns
进行排序,然后使用 row_number
函数从 window.
Example:
df.show()
#using some sample records from post
#+-----+-----+----+
#|city1|city2|dist|
#+-----+-----+----+
#| A| B| 100|
#| A| C| 200|
#| B| A| 100|
#+-----+-----+----+
df1=df.withColumn("new_cnct",array_join(array_sort(array(col("city1"),col("city2"),col("dist"))),'')).\
withColumn("s_id",spark_partition_id())
from pyspark.sql import *
from pyspark.sql.window import *
w=Window.partitionBy("new_cnct").orderBy("s_id")
df1.withColumn("rn",row_number().over(w)).\
filter(col("rn") ==1).\
drop("rn","s_id","new_cnct").\
show(10,False)
#+-----+-----+----+
#|city1|city2|dist|
#+-----+-----+----+
#|A |B |100 |
#|A |C |200 |
#+-----+-----+----+