我们如何在数据框中具有相同ID的两行?

时间:2019-07-23 12:09:12

标签: apache-spark pyspark

我试图制作一个由顶点和边数据框组成的GraphFrame。在顶点数据框中,我看到我有两次相同的顶点,并且具有相同的id和值。我感到困惑,因为我认为数据框中的每个顶点应该有一个唯一的ID,但事实并非如此,因为有两行具有相同的ID。我可以得到一些解释,为什么我们允许在数据框中有两个具有相同id的顶点,以及在查询数据框和使用它的Graphframe时会产生什么后果? 注意:我将顶点值用作ID

7/23/2019 02:14:07 PM

输出类似于

v = sqlContext.createDataFrame([
    ("a", "Alice"),
    ("a", "Alice"),
], ["id", "value"])

由于ID相同,我一直期待一个错误。

1 个答案:

答案 0 :(得分:0)

在重复的行中,数据框doesn't会引发任何错误。

要消除重复的行,可以使用 .dropDuplicates(),.distinct(),.row_number()..etc 方法。

示例:

>>> v = sqlContext.createDataFrame([
...     ("a", "Alice"),
...     ("a", "Alice"),
... ], ["id", "value"])

dropDuplicates():

>>> v.dropDuplicates().show()
+---+-----+
| id|value|
+---+-----+
|  a|Alice|
+---+-----+

distinct():

>>> v.distinct().show()
+---+-----+
| id|value|
+---+-----+
|  a|Alice|
+---+-----+

row_number():

>>> from pyspark.sql.window import *
>>> from pyspark.sql.functions import row_number
>>> v.withColumn("row_num", row_number().over(Window.partitionBy("id","value").orderBy("id"))).filter("row_num =1").drop("row_num").show()
+---+-----+
| id|value|
+---+-----+
|  a|Alice|
+---+-----+