| 2514 | }; |
| 2515 | |
| 2516 | Status ConvertCategoricals(const PandasOptions& options, ChunkedArrayVector* arrays, |
| 2517 | FieldVector* fields) { |
| 2518 | std::vector<int> columns_to_encode; |
| 2519 | |
| 2520 | // For Categorical conversions |
| 2521 | auto EncodeColumn = [&](int j) { |
| 2522 | int i = columns_to_encode[j]; |
| 2523 | if (options.zero_copy_only) { |
| 2524 | return Status::Invalid("Need to dictionary encode a column, but ", |
| 2525 | "only zero-copy conversions allowed"); |
| 2526 | } |
| 2527 | compute::ExecContext ctx(options.pool); |
| 2528 | ARROW_ASSIGN_OR_RAISE( |
| 2529 | Datum out, DictionaryEncode((*arrays)[i], |
| 2530 | compute::DictionaryEncodeOptions::Defaults(), &ctx)); |
| 2531 | (*arrays)[i] = out.chunked_array(); |
| 2532 | (*fields)[i] = (*fields)[i]->WithType((*arrays)[i]->type()); |
| 2533 | return Status::OK(); |
| 2534 | }; |
| 2535 | |
| 2536 | if (options.HasCategoricalColumns()) { |
| 2537 | for (int i = 0; i < static_cast<int>(arrays->size()); i++) { |
| 2538 | if ((*arrays)[i]->type()->id() != Type::DICTIONARY && |
| 2539 | options.IsCategoricalColumn((*fields)[i]->name())) { |
| 2540 | columns_to_encode.push_back(i); |
| 2541 | } |
| 2542 | } |
| 2543 | } |
| 2544 | if (options.strings_to_categorical) { |
| 2545 | for (int i = 0; i < static_cast<int>(arrays->size()); i++) { |
| 2546 | if (is_base_binary_like((*arrays)[i]->type()->id()) || |
| 2547 | is_binary_view_like((*arrays)[i]->type()->id())) { |
| 2548 | columns_to_encode.push_back(i); |
| 2549 | } |
| 2550 | } |
| 2551 | } |
| 2552 | return OptionalParallelFor(options.use_threads, |
| 2553 | static_cast<int>(columns_to_encode.size()), EncodeColumn); |
| 2554 | } |
| 2555 | |
| 2556 | } // namespace |
| 2557 |
no test coverage detected