Pyspark数据框内部联接第二次不起作用

问题描述

我试图将一个表与自身连接几次,以获取其所有连接的cnt: 原始表格:

cust_id    node_1    node_2    cnt    
----------------------------------
1          5         6         12
5          10        9         3
6          7         10        4

我想要的桌子:

cust_id   cnt    cnt_node_1    cnt_node_2   
-----------------------------------------
1         12     3             4

(请注意,cnt_node_1是cust_id 5的cnt值,它是3,与cnt_node_2相同)

我能够加入为第一个节点产生结果

cust_id   cnt    cnt_node_1  
----------------------------
1         12     3          

使用代码

df1 = table.alias('df1')
df2 = table.select("cust_id","cnt").withColumnRenamed("cust_id","cust_id_1").withColumnRenamed("cnt","cnt_1").alias('df2')
df1 = df1.join(df2,on = df1.node_1 == df2.cust_id_1,how = "inner")

然后我要尝试使用完全相同的代码对节点2做相同的事情

df2 = table.select("cust_id","cust_id_2").withColumnRenamed("cnt","cnt_2").alias('df2')
df1 = df1.join(df2,on = df1.node_2 == df2.cust_id_2,how = "inner")

但是我到处都是NULL:

cust_id   cnt    cnt_node_1    cnt_node_2   
-----------------------------------------
1         12     3             NULL

有人可以给我提示为什么此内部联接第二次不起作用吗?预先感谢!

解决方法

尝试简单。

    bot.on('message',message =>{

   if(message.content.startsWith(`${prefix}ban`)){
    
    const args = message.content.trim().split(/ +/g);

    const bUser = message.guild.member(message.mentions.users.first()) 

        if(!message.guild.member(message.author).hasPermission("ADMINISTRATOR")) {return message.reply("You do not have enough permission for this command!")};
        if(!message.guild.member(bot.user).hasPermission("ADMINISTRATOR")) {return message.reply("The bot does not have enough permissions for this commands")};
        if(message.mentions.users.size === 0) {return message.reply("You need to ping a user!")};

        if (!message.guild) return;

        let banReason = args.join(" ").slice(27);

        const banembed = {
            color: "RANDOM",title: `Ban`,description: `${bUser} has been banned by ${message.author}`,fields: [{
                name: "Ban Reason",value: `${banReason}`,}],}

                bUser.send({ embed: banembed }).
                then(
                 bUser.ban({ reason: banReason })
                (message.channel.send({ embed: banembed })
                )
            )   
    };
});