我试图制作一个由顶点和边数据框组成的GraphFrame。在顶点数据框中,我看到我有两次相同的顶点,并且具有相同的id和值。我感到困惑,因为我认为数据框中的每个顶点应该有一个唯一的ID,但事实并非如此,因为有两行具有相同的ID。我可以得到一些解释,为什么我们允许在数据框中有两个具有相同id的顶点,以及在查询数据框和使用它的Graphframe时会产生什么后果? 注意:我将顶点值用作ID
7/23/2019 02:14:07 PM
输出类似于
v = sqlContext.createDataFrame([
("a", "Alice"),
("a", "Alice"),
], ["id", "value"])
由于ID相同,我一直期待一个错误。
答案 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|
+---+-----+