rdd(row)使用mappartitions删除分区内的重复项

wdebmtf2  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(439)

我有一个df,它已经在所有列上进行了分区和排序。现在我只想删除每个分区中的重复项重复项不会跨越多个分区)。我不能用 df.distinct() ,因为它会导致随机播放,我想避免随机播放。我将df转换成rdd并使用 mapPartitions . 我得到的输出,但它运行非常慢。如何对此进行优化?下面是我的代码。

def unique_values(iterable):
    it = iter(iterable)
    previous = next(it)
    yield previous
    for item in it:
        if item != previous:
            previous = item
            yield item

rdd = df.rdd.mapPartitions(unique_values)

df = ..converting rdd back to df...

spark版本:emr 5.28上的2.4.4

4ioopgfo

4ioopgfo1#

假设Dataframe df 已经在所有列上进行了分区和排序。

为每行分配分区id

val partitionDF = df.withColumn("partitionId", spark_partition_id())

根据分区ID和所有的\u列进行分组,以在每个分区中获得不同的结果

partitionDF.groupBy(partitionDF.columns.map(col): _*).count()

相关问题