簡體   English   中英

rdd(row) 使用 mapPartitions 刪除分區內的重復項

[英]rdd(row) remove duplicates within a partition using mapPartitions

我有一個 DF,它已經在所有列上進行了分區和排序。 現在我只想刪除每個分區中的重復項。 (重復不會跨越分區)。 我不能使用df.distinct() ,因為它會導致洗牌,我想避免洗牌。 我將 df 轉換為 rdd 並使用mapPartitions 我得到了 output 但它運行得非常慢。 如何優化這個? 下面是我的代碼。

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

讓我們假設 dataframe df已經在所有列上進行了分區和排序。

為每一行分配分區 id

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

根據partitionIdall_columns以在每個分區中變得不同

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM