spark 中排序是如何在幕后发生的

问题描述 投票:0回答:1

考虑一下,我有一个 100 GB 的 csv 文件,我需要创建一个排名列,让我们说基于“customer_spends_in_dollar”列的“排名”。

df = spark.read.csv('file.csv')    
(
    df
    .withColumn(
        'rank',
        F.rank().over(
            Window().orderBy('customer_spends_in_dollar')
        )
    )
).display()

规格:8 GB 驱动程序、8 GB 2 个工作节点、每个 2 个核心

想法存在,对于这个荒谬的不。需要强调的是,不可能将整个数据加载到单个节点(驱动程序)上。

上述转换的第一个操作是对整个数据帧进行排序,现在根据我的理解,对工作节点上的各个分区文件(部分文件)进行排序,不会完全对数据进行排序,它只会对一部分数据进行排序,并且此外,它需要立即完全排序,然后我看到一个问题,如何在驱动程序节点上组装这些数据,因为它无法放入内存中。这就是我的理解停止的地方。

当然,但是 Spark 能够做到以上的事情,我已经检查过,这只是一个长期的工作。但怎么办?

apache-spark directed-acyclic-graphs
1个回答
0
投票

如果没有

partition
值,您将看到
sort
/
order by
将数据移动到单个分区。 IE。完整的数据框在那里排序。以及所有随之而来的 OOM 问题等。

Spark的基本原则是并行性,但它需要根据某些列值进行分组或分区来分布数据。如果不是这种情况,那就是发生的情况,而不是首先进行本地(分区)排序。

© www.soinside.com 2019 - 2024. All rights reserved.