मान लें कि मेरे पास एक Arrow::Array (या Dataframe या ChunkedArray, महत्वपूर्ण नहीं है) और मेरे पास कुछ विधेय है। मैं एक नए Arrow::BooleanArray की गणना करना चाहता हूं, जो प्रत्येक सरणी तत्व पर लागू इस विधेय के परिणाम को संग्रहीत करता है।

मेरा मामला यह है कि मेरे पास date32 के दो क्रमबद्ध सरणी हैं और मैं एक मुखौटा वापस करना चाहता हूं जो मुझे बताता है कि पहले सरणी का मान दूसरे में मौजूद है या नहीं। निम्नलिखित की तरह:

std::shared_ptr<arrow::BooleanArray> getDatesMask(
    const std::shared_ptr<arrow::Array>& lhs,
    const std::shared_ptr<arrow::Array>& lhs) 
{
   // some pseudo code how this could work
   // for date in lhs:
   //     res.Append(date in rhs);
   // return res;
}
0
Kirill Lykov 21 जिंदा 2021, 17:18
1
सटीक मिलान नहीं है, लेकिन क्या एल्गोरिदम में set_difference उपयोगी होगा?
 – 
Michael Surette
21 जिंदा 2021, 17:38
set_difference। ध्यान दें कि std::set_intersection, और अन्य std::set_ संबंधित एल्गोरिथम फ़ंक्शन भी हैं।
 – 
PaulMcKenzie
21 जिंदा 2021, 17:46

1 उत्तर

सबसे बढ़िया उत्तर

ऐसा लगता है कि आपको is_in कंप्यूट फ़ंक्शन की आवश्यकता है:

std::shared_ptr<arrow::BooleanArray> getDatesMask(
    const std::shared_ptr<arrow::Array>& haystack,
    const std::shared_ptr<arrow::Array>& needles)
{
  arrow::Datum mask = arrow::compute::IsIn(haystack, needles).ValueOrDie();
  return std::static_pointer_cast<arrow::BooleanArray>(mask.make_array());
}

is_in (और अन्य गणना कार्यों) का दस्तावेज़ीकरण: https ://arrow.apache.org/docs/cpp/compute.html#containment-tests

1
Kietz 21 जिंदा 2021, 19:12
यह काम करता है एकमात्र टिप्पणी यह ​​है कि किसी को #include <arrow/compute/api_scalar.h> जोड़ने की जरूरत है
 – 
Kirill Lykov
22 जिंदा 2021, 11:42