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

tennenrishin
tennenrishin New Altair Community Member
edited November 5 in Community Q&A
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
Tagged:

Answers

  • MariusHelf
    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
  • tennenrishin
    tennenrishin New Altair Community Member
    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.)
  • MariusHelf
    MariusHelf New Altair Community Member
    No, unfortunately there's no possibility to do that.

    Best regards,
    Marius
  • tennenrishin
    tennenrishin New Altair Community Member
    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
  • MariusHelf
    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
  • tennenrishin
    tennenrishin New Altair Community Member
    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.  :'(
  • Marco_Boeck
    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
  • tennenrishin
    tennenrishin New Altair Community Member
    :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 :-[