Spark合并不会减少分区数

时间:2018-10-09 00:00:08

标签: apache-spark pyspark

我有这个代码

df.coalesce(40)

check: function() {

    for (var i = 0; i < this.aliens.length; i++) {

        var item = this.aliens[i];

        if ((bullet.lockedXPos >= item.xPos) && (bullet.lockedXPos <= item.xPos + this.size) && (bullet.yPos >= item.yPos) && (bullet.yPos <= item.yPos + this.size)) {

            item.hit = true;
            bullet.hidden = true;
            while (bullet.yPos >= 0) {};
            bullet.hidden = false;


        }

    }

},

不是打印40,我在做错什么吗?

3 个答案:

答案 0 :(得分:1)

尝试执行以下操作:

df_new=df.coalesce(40)
print(" after coalisce getting nb partition " + str(df_new.rdd.getNumPartitions()))

Coalesce返回新的rdd而不是就地更改。

答案 1 :(得分:0)

coalesce 方法将为您返回转换后的数据框。它不会修改原始数据框。应用合并转换后,必须获得分区数。

例如,在8核计算机上运行的Spark Shell上,返回以下输出。

func getUserInfo(forUserId forId: String, handler: @escaping (User) -> ()) {

        REF_USERS.child(forId).observe(.value, with: { (snapshot) in

            //..... handle snapshot

            let user = User(uid: uid, dictionary: dictionary)

            handler(user)

        }) { (error) in
            print(error.localizedDescription)
        }


    }//end func

应用合并后,将获得所需的输出

 scala> df.rdd.getNumPartitions
 res3: Int = 8

答案 2 :(得分:0)

我建议您先了解一下Spark体系结构,然后再尝试了解不可变对象的概念。这将帮助您更好地理解其他用户上面提供的响应。