在spark sql数据帧中交换两列并删除重复项

时间:2017-12-25 00:11:10

标签: python-2.7 pyspark

我正在使用spark 1.6和python 2.7,我有一个如下所示的火花数据框:

df = sqlContext.createDataFrame([
        ("ab", "bc"),
        ("bc", "cd"),
        ("cd", "ab"),
        ("bc", "ab"),
        ("cd", "bc"),
        ("ab", "cd"),
    ], ["col1", "col2"])

此数据框包含图形的顶点为" col1" to" col2"。我想要做的是删除重复的col1和col2对。 我的方法是什么,比较col1和col2,如果col2<然后col1交换列,然后执行不同的操作。

操作完成后,结果应为:

+------------+
| col1  col2 |
+------------+
|  ab   bc   |
|  bc   cd   |
|  cd   ab   |
+------------+

基本上,我正在尝试创建一个只有有向边的图形。

1 个答案:

答案 0 :(得分:3)

您可以简单地执行以下操作

from pyspark.sql import functions as F
finaldf = df.withColumn('col1_1', F.when(df.col2 < df.col1, df.col2).otherwise(df.col1)) \
    .withColumn('col2_1', F.when(df.col2 < df.col1, df.col1).otherwise(df.col2))\

finaldf.select(finaldf.col1_1.alias("col1"), finaldf.col2_1.alias("col2")).distinct().show()

这里完成的是创建两个新列应用col2 < col1逻辑,最后select distincts