🎉Community Raffle - Win $25

An exclusive raffle opportunity for active members like you! Complete your profile, answer questions and get your first accepted badge to enter the raffle.
Join and Win

[SOLVED] WARNING: Join: Special attribute 'id' already exist, skipping!

User: "tennenrishin"
New Altair Community Member
Updated by Jocelyn
Hello all

My console is sometimes filled with the following warning message:
WARNING: Join: Special attribute 'id' already exist, skipping!

Can anyone explain to me what it means? In particular, what is it about the process below (for example) that is warning-worthy?
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<process version="5.2.008">
 <context>
   <input/>
   <output/>
   <macros/>
 </context>
 <operator activated="true" class="process" compatibility="5.2.008" expanded="true" name="Process">
   <process expanded="true" height="654" width="987">
     <operator activated="true" class="generate_data_user_specification" compatibility="5.2.008" expanded="true" height="60" name="Generate Data by User Specification" width="90" x="45" y="30">
       <list key="attribute_values">
         <parameter key="key" value="1"/>
         <parameter key="data" value="5"/>
       </list>
       <list key="set_additional_roles"/>
     </operator>
     <operator activated="true" class="set_role" compatibility="5.2.008" expanded="true" height="76" name="Set Role" width="90" x="179" y="30">
       <parameter key="name" value="key"/>
       <parameter key="target_role" value="id"/>
       <list key="set_additional_roles"/>
     </operator>
     <operator activated="true" class="generate_data_user_specification" compatibility="5.2.008" expanded="true" height="60" name="Generate Data by User Specification (2)" width="90" x="45" y="120">
       <list key="attribute_values">
         <parameter key="key" value="1"/>
         <parameter key="data2" value="6"/>
       </list>
       <list key="set_additional_roles"/>
     </operator>
     <operator activated="true" class="set_role" compatibility="5.2.008" expanded="true" height="76" name="Set Role (2)" width="90" x="179" y="120">
       <parameter key="name" value="key"/>
       <parameter key="target_role" value="id"/>
       <list key="set_additional_roles"/>
     </operator>
     <operator activated="true" class="join" compatibility="5.2.008" expanded="true" height="76" name="Join" width="90" x="301" y="75">
       <parameter key="join_type" value="left"/>
       <list key="key_attributes"/>
     </operator>
     <connect from_op="Generate Data by User Specification" from_port="output" to_op="Set Role" to_port="example set input"/>
     <connect from_op="Set Role" from_port="example set output" to_op="Join" to_port="left"/>
     <connect from_op="Generate Data by User Specification (2)" from_port="output" to_op="Set Role (2)" to_port="example set input"/>
     <connect from_op="Set Role (2)" from_port="example set output" to_op="Join" to_port="right"/>
     <connect from_op="Join" from_port="join" to_port="result 1"/>
     <portSpacing port="source_input 1" spacing="0"/>
     <portSpacing port="sink_result 1" spacing="0"/>
     <portSpacing port="sink_result 2" spacing="0"/>
   </process>
 </operator>
</process>
Thanks in advance
Isak

Find more posts tagged with

Sort by:
1 - 8 of 81
    User: "MariusHelf"
    New Altair Community Member
    Hi Isak,

    in this case this is a bug and the message can be ignored (it's only the message, nothing more).

    However, imagine you are joining to example sets by id, where each of them has a label. The problem then is, that the special roles must be unique, i.e. the final example set may contain only one label attribute. In that case, only the label from the first set is kept, whereas the label from the second example set will be dismissed. That's what the error message wants to say.

    But since you are joining by id anyway, you can safely ignore the message here.

    Best regards,
    Marius
    User: "tennenrishin"
    New Altair Community Member
    OP
    Thanks for the explanation, Marius!

    (I assume then there is no way currently to get rid of these messages without changing the overall process verbosity to below warning level.)
    User: "MariusHelf"
    New Altair Community Member
    No, unfortunately there's no possibility to do that.

    Best regards,
    Marius
    User: "tennenrishin"
    New Altair Community Member
    OP
    Marius wrote:
    in this case this is a bug and the message can be ignored...
    I know it's (almost) harmless, but it would be nice if this little bug could go away  :)

    Regards,
    Isak
    User: "MariusHelf"
    New Altair Community Member
    Hi Isak,

    I created a ticket for this issue, but since it is, as you already stated, a small thing, but a bit complicated since at the same time a lot of special cases must be considered, it probably won't get high priority.

    Best regards,
    Marius
    User: "tennenrishin"
    New Altair Community Member
    OP
    Pleeeease consider reconsidering the priority of this request ;D
    I have to wade through hundreds (if not thousands) of these messages every day in my console to find the meaningful messages between them.  :'(
    User: "Marco_Boeck"
    New Altair Community Member
    Hi,

    I guess I'm in a hacky mood when I'm reading your threads, so you are in luck again (Refers to your other thread Accessing "last modified" metadata) 8)
    Disclaimer: The following code is a very dirty hack and should not be used! But I guess if you are having the problem of sifting through hundreds of these false warnings it will help you until the issue gets resolved.
    The solution is once again the Execute Script operator (this thing can be abused to no end ::) )
    Add the Execute script operator before your Join operator and put this in as the script paramter:

    import com.rapidminer.operator.Operator;
    import java.util.logging.Filter;
    import java.util.logging.LogRecord;
    import java.util.logging.Logger;


    Logger.getLogger(Operator.class.getName()).setFilter(new Filter() {

    @Override
    public boolean isLoggable(LogRecord record) {
    if (record.getMessage().contains("Special attribute 'id' already exist")) {
    return false;
    } else {
    return true;
    }
    }
    });

    return (input[0]);
    This will set a filter to the logger which will filter exactly all log entries which contain the phrase "Special attribute 'id' already exist". After your join operator you can place another execute script operator which will remove the filter again:

    import com.rapidminer.operator.Operator;
    import java.util.logging.Logger;


    Logger.getLogger(Operator.class.getName()).setFilter(null);

    return (input[0]);
    But as mentioned above, this is dirty and should not be done, but I guess in your case you might like it anyway ;)

    Regards,
    Marco
    User: "tennenrishin"
    New Altair Community Member
    OP
    :o
    Thank you!

    I didn't even realize what the Execute Script operator is. I think it lacked documentation when I once looked into it, so I've spent hours and hours ever since then writing "scripts" graphically in the Turing tarpit that is RM Macro + Process Control operators :-[