Uploaded image for project: 'Apache Arrow'
  1. Apache Arrow
  2. ARROW-9503

[Rust] Comparison sliced arrays is wrong

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 1.0.0
    • Component/s: Rust

      Description

      Comparison of arrow arrays where one is sliced is dependent on the order of comparison, and doesn't always yield correct results.

      The following minimal example shows the differing results.

      Unable to find source-code formatter for language: rust. Available languages are: actionscript, ada, applescript, bash, c, c#, c++, cpp, css, erlang, go, groovy, haskell, html, java, javascript, js, json, lua, none, nyan, objc, perl, php, python, r, rainbow, ruby, scala, sh, sql, swift, visualbasic, xml, yaml
              use arrow::{
                  datatypes::Int32Type,
                  compute,
                  array::{
                      Array,
                      PrimitiveBuilder,
                      PrimitiveArray
                  }
              };
              let mut builder = PrimitiveBuilder::new(10);
              for v in 0..10 {
                  builder.append_value(v).unwrap()
              }
              let a: PrimitiveArray<Int32Type> = builder.finish();
      
              let mut builder = PrimitiveBuilder::new(10);
              for v in 5..10 {
                  builder.append_value(v).unwrap()
              }
              let b: PrimitiveArray<Int32Type> = builder.finish();
              // returns Array trait
              let sliced_a = a.slice(5, 5);
              // Downcast to PrimitiveArray
              let sliced_a = sliced_a.as_any().downcast_ref().unwrap();
      
              println!("{:?}", a.slice(5, 5));
              println!("{:?}", b);
              println!("{:?}", compute::eq(sliced_a, &b));
              println!("{:?}", compute::eq(&b, sliced_a))
      

      This prints:

      Unable to find source-code formatter for language: text. Available languages are: actionscript, ada, applescript, bash, c, c#, c++, cpp, css, erlang, go, groovy, haskell, html, java, javascript, js, json, lua, none, nyan, objc, perl, php, python, r, rainbow, ruby, scala, sh, sql, swift, visualbasic, xml, yaml
      PrimitiveArray<Int32>
      [
        5,
        6,
        7,
        8,
        9,
      ]
      PrimitiveArray<Int32>
      [
        5,
        6,
        7,
        8,
        9,
      ]
      Ok(PrimitiveArray<Boolean>
      [
        false,
        false,
        false,
        false,
        false,
      ])
      Ok(PrimitiveArray<Boolean>
      [
        true,
        true,
        true,
        true,
        true,
      ])
      

      I would expect both comparison arrays to evaluate to true. This same effect is also occurring with utf8arrays.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                paddyhoran Paddy Horan
                Reporter:
                ritchie46 Ritchie
              • Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved:

                  Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 0.5h
                  0.5h