【问题标题】:columns comparison in pyspark using dataframes使用数据框在pyspark中进行列比较
【发布时间】:2021-10-18 12:23:09
【问题描述】:

我有一个数据框 DF1,它包含三列 city1、city2、distance。我想通过删除其中一个相同的行来从 DF1 创建一个新的数据帧 DF2

我正在尝试检查 btw 城市的距离。由于城市 (A 和 B) 或 (B 和 A) 将具有相同的 diatnce 。我需要删除其中一个

city1  city2  dist
A      B      100
A      C      200
B      A      100
C      B      200

所以在此,需要删除第一行或第三行中的任何一个,因为它们都被认为是相同的

预期输出

city1   city2  dist
A       B      100
A      C      200
C      B      200

【问题讨论】:

    标签: python dataframe apache-spark pyspark rdd


    【解决方案1】:

    通过创建 array combined all columns 进行排序,然后使用 row_number 函数从窗口中获取第一条记录。

    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 |
    #+-----+-----+----+
    

    【讨论】:

      猜你喜欢
      • 2020-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-30
      • 2018-07-18
      • 2020-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多