spark分割Dataframe

mqkwyuun  于 2021-07-09  发布在  Spark
关注(0)|答案(1)|浏览(366)

我有一个用例,需要使用列(它是一个guid列)对Dataframe进行重复数据消除。但我需要把它们存放在一个单独的地方,而不是把复制品扔掉。例如,如果我们有以下数据,带有schema(name,guid): (a, 1), (b, 2), (a, 2), (a, 3), (c, 1), (c, 4) . 我想拆分数据集,以便: (a, 1), (b, 2), (a, 3), (c, 4) 在1部分和 (a, 2), (c, 1) 第二部分。如果我使用dropduplicates(col(“guid”)),第二部分就会丢失。有什么有效的方法可以做到这一点?

iugsix8n

iugsix8n1#

您可以指定一个行号,并根据行号是否等于1将Dataframe分成两部分。

from pyspark.sql import functions as F, Window

df2 = df.withColumn(
    'rn', 
    F.row_number().over(Window.partitionBy('GUID').orderBy(F.monotonically_increasing_id()))
)
df2.show()
+----+----+---+
|name|GUID| rn|
+----+----+---+
|   a|   1|  1|
|   c|   1|  2|
|   a|   3|  1|
|   b|   2|  1|
|   a|   2|  2|
|   c|   4|  1|
+----+----+---+

df2_part1 = df2.filter('rn = 1').drop('rn')
df2_part2 = df2.filter('rn != 1').drop('rn')

df2_part1.show()
+----+----+
|name|GUID|
+----+----+
|   a|   1|
|   a|   3|
|   b|   2|
|   c|   4|
+----+----+

df2_part2.show()
+----+----+
|name|GUID|
+----+----+
|   c|   1|
|   a|   2|
+----+----+

相关问题