You are viewing a plain text version of this content. The canonical link for it is here.
Posted to github@arrow.apache.org by GitBox <gi...@apache.org> on 2020/06/24 19:30:09 UTC
[GitHub] [arrow] bkietz opened a new pull request #7534: ARROW-8729: [C++][Dataset] Ensure non-empty batches when only virtual columns are projected
bkietz opened a new pull request #7534:
URL: https://github.com/apache/arrow/pull/7534
This bug is inherited from `parquet::arrow::RowGroupRecordBatchReader`, which yielded empty record batches when no columns were projected because no field readers were available from which to derive batch size. I've added logic to get usable batch sizes from file metadata in the empty columns case
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] bkietz commented on a change in pull request #7534: ARROW-8729: [C++][Dataset] Ensure non-empty batches when only virtual columns are projected
Posted by GitBox <gi...@apache.org>.
bkietz commented on a change in pull request #7534:
URL: https://github.com/apache/arrow/pull/7534#discussion_r445470685
##########
File path: cpp/src/parquet/arrow/reader.cc
##########
@@ -338,22 +348,37 @@ class RowGroupRecordBatchReader : public ::arrow::RecordBatchReader {
// TODO (hatemhelal): Consider refactoring this to share logic with ReadTable as this
// does not currently honor the use_threads option.
std::vector<std::shared_ptr<ChunkedArray>> columns(field_readers_.size());
- for (size_t i = 0; i < field_readers_.size(); ++i) {
- RETURN_NOT_OK(field_readers_[i]->NextBatch(batch_size_, &columns[i]));
- if (columns[i]->num_chunks() > 1) {
- return Status::NotImplemented("This class cannot yet iterate chunked arrays");
+ int64_t num_rows = -1;
+
+ if (columns.empty()) {
+ num_rows = std::min(batch_size_, *row_group_remaining_size_);
Review comment:
```suggestion
// num_rows cannot be derived from field_readers_ so compute it using
// row group sizes cached from metadata
num_rows = std::min(batch_size_, *row_group_remaining_size_);
```
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] bkietz commented on pull request #7534: ARROW-8729: [C++][Dataset] Ensure non-empty batches when only virtual columns are projected
Posted by GitBox <gi...@apache.org>.
bkietz commented on pull request #7534:
URL: https://github.com/apache/arrow/pull/7534#issuecomment-649500754
@jorisvandenbossche that build comes from the first of two `suggestion` commits and it doesn't seem to have crashed with both commits in place. Maybe it was ephemeral?
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] wesm commented on pull request #7534: ARROW-8729: [C++][Dataset] Ensure non-empty batches when only virtual columns are projected
Posted by GitBox <gi...@apache.org>.
wesm commented on pull request #7534:
URL: https://github.com/apache/arrow/pull/7534#issuecomment-649579503
That crash is ARROW-8999. I'm fairly confident it's a real bug given that is happens about 1-5% of the time
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] fsaintjacques commented on a change in pull request #7534: ARROW-8729: [C++][Dataset] Ensure non-empty batches when only virtual columns are projected
Posted by GitBox <gi...@apache.org>.
fsaintjacques commented on a change in pull request #7534:
URL: https://github.com/apache/arrow/pull/7534#discussion_r445605965
##########
File path: cpp/src/parquet/arrow/reader.cc
##########
@@ -338,22 +348,39 @@ class RowGroupRecordBatchReader : public ::arrow::RecordBatchReader {
// TODO (hatemhelal): Consider refactoring this to share logic with ReadTable as this
// does not currently honor the use_threads option.
std::vector<std::shared_ptr<ChunkedArray>> columns(field_readers_.size());
- for (size_t i = 0; i < field_readers_.size(); ++i) {
- RETURN_NOT_OK(field_readers_[i]->NextBatch(batch_size_, &columns[i]));
- if (columns[i]->num_chunks() > 1) {
- return Status::NotImplemented("This class cannot yet iterate chunked arrays");
+ int64_t num_rows = -1;
+
+ if (columns.empty()) {
+ // num_rows cannot be derived from field_readers_ so compute it using
+ // row group sizes cached from metadata
+ num_rows = std::min(batch_size_, *row_group_remaining_size_);
+ *row_group_remaining_size_ -= num_rows;
+ if (*row_group_remaining_size_ == 0) {
+ ++row_group_remaining_size_;
}
+ } else {
+ for (size_t i = 0; i < field_readers_.size(); ++i) {
+ RETURN_NOT_OK(field_readers_[i]->NextBatch(batch_size_, &columns[i]));
+ if (columns[i]->num_chunks() > 1) {
+ return Status::NotImplemented("This class cannot yet iterate chunked arrays");
+ }
+ }
+ num_rows = columns[0]->length();
}
// Create an intermediate table and use TableBatchReader as an adaptor to a
// RecordBatch
- std::shared_ptr<Table> table = Table::Make(schema_, columns);
+ std::shared_ptr<Table> table = Table::Make(schema_, columns, num_rows);
+
RETURN_NOT_OK(table->Validate());
::arrow::TableBatchReader table_batch_reader(*table);
return table_batch_reader.ReadNext(out);
}
private:
+ std::shared_ptr<FileMetaData> metadata_;
Review comment:
`metadata_` is not used.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] jorisvandenbossche commented on a change in pull request #7534: ARROW-8729: [C++][Dataset] Ensure non-empty batches when only virtual columns are projected
Posted by GitBox <gi...@apache.org>.
jorisvandenbossche commented on a change in pull request #7534:
URL: https://github.com/apache/arrow/pull/7534#discussion_r445392036
##########
File path: cpp/src/parquet/arrow/reader.cc
##########
@@ -338,22 +348,37 @@ class RowGroupRecordBatchReader : public ::arrow::RecordBatchReader {
// TODO (hatemhelal): Consider refactoring this to share logic with ReadTable as this
// does not currently honor the use_threads option.
std::vector<std::shared_ptr<ChunkedArray>> columns(field_readers_.size());
- for (size_t i = 0; i < field_readers_.size(); ++i) {
- RETURN_NOT_OK(field_readers_[i]->NextBatch(batch_size_, &columns[i]));
- if (columns[i]->num_chunks() > 1) {
- return Status::NotImplemented("This class cannot yet iterate chunked arrays");
+ int64_t num_rows = -1;
+
+ if (columns.empty()) {
+ num_rows = std::min(batch_size_, *row_group_remaining_size_);
Review comment:
might be good to add a comment here why this is being done
##########
File path: python/pyarrow/tests/test_dataset.py
##########
@@ -1605,3 +1605,21 @@ def test_dataset_schema_metadata(tempdir):
assert b"pandas" in schema.metadata
# ensure it is still there in a projected schema (with column selection)
assert schema.equals(projected_schema, check_metadata=True)
+
+
+@pytest.mark.parquet
+@pytest.mark.pandas
+def test_dataset_project_only_partition_columns(tempdir):
+ # ARROW-8729
+ import pyarrow.parquet as pq
+
+ table = pa.table({'part': 'a a b b'.split(), 'col': list(range(4))})
+
+ path = str(tempdir / 'test_dataset')
+ pq.write_to_dataset(table, path, partition_cols=['part'])
+ dataset = ds.dataset(path, partitioning='hive')
+
+ all_cols = dataset.to_table(use_threads=False)
+ part_only = dataset.to_table(columns=['part'], use_threads=False)
+
+ assert all_cols.column('part') == part_only.column('part')
Review comment:
```suggestion
assert all_cols.column('part').equals(part_only.column('part'))
```
`==` is now element-wise, and the "truthyness" of a boolean chunked array is always True, regardless of the values in it .. (so as long both tables have a "part" column, the above check would always return True even if the columns itself are not equal)
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] wesm commented on a change in pull request #7534: ARROW-8729: [C++][Dataset] Ensure non-empty batches when only virtual columns are projected
Posted by GitBox <gi...@apache.org>.
wesm commented on a change in pull request #7534:
URL: https://github.com/apache/arrow/pull/7534#discussion_r453366215
##########
File path: rust/datafusion/README.md
##########
@@ -69,5 +69,15 @@ DataFusion includes a simple command-line interactive SQL utility. See the [CLI
- [x] Parquet primitive types
- [ ] Parquet nested types
-# Examples
+# Supported SQL
+This library currently supports the following SQL constructs:
+
+* `CREATE EXTERNAL TABLE X STORED AS PARQUET LOCATION '...';` to register a table's locations
+* `SELECT ... FROM ...` together with any expression
+* `ALIAS` to name an expression
+* `CAST` to change types, including e.g. `Timestamp(Nanosecond, None)`
+* most mathematical unary and binary expressions such as `+`, `/`, `sqrt`, `tan`, `>=`.
+* `WHERE` to filter
+* `GROUP BY` together with one of the following aggregations: `MIN`, `MAX`, `COUNT`, `SUM`, `AVG`
+* `ORDER BY` together with an expression and optional `DESC`
Review comment:
This shouldn't be here
##########
File path: cpp/src/parquet/arrow/reader.h
##########
@@ -151,8 +151,10 @@ class PARQUET_EXPORT FileReader {
int i, std::shared_ptr<::arrow::ChunkedArray>* out) = 0;
/// \brief Return a RecordBatchReader of row groups selected from row_group_indices, the
- /// ordering in row_group_indices matters.
- /// \returns error Status if row_group_indices contains invalid index
+ /// ordering in row_group_indices matters. Each row group will held in memory until
+ /// each slice has been yielded as a RecordBatch, at which point the next row group
+ /// will be loaded. FileReaders must outlive their RecordBatchReaders.
Review comment:
Probably want to add a TODO here that we want to fix this (this is a problem for memory use)
##########
File path: cpp/src/parquet/arrow/reader.cc
##########
@@ -794,8 +773,35 @@ Status FileReaderImpl::GetRecordBatchReader(const std::vector<int>& row_group_in
END_PARQUET_CATCH_EXCEPTIONS
}
- return RowGroupRecordBatchReader::Make(row_group_indices, column_indices, this,
- reader_properties_.batch_size(), out);
+ using ::arrow::RecordBatchIterator;
+
+ // NB: This lambda will be invoked lazily whenever a new row group must be
+ // scanned, so it must capture `column_indices` by value (it will not
+ // otherwise outlive the scope of `GetRecordBatchReader()`). `this` is a non-owning
+ // pointer so we are relying on the parent FileReader outliving this RecordBatchReader.
+ auto row_group_index_to_batch_iterator =
+ [column_indices, this](const int* i) -> ::arrow::Result<RecordBatchIterator> {
+ std::shared_ptr<::arrow::Table> table;
+ RETURN_NOT_OK(RowGroup(*i)->ReadTable(column_indices, &table));
Review comment:
It isn't great to be reading the whole row group into memory before returning it in chunks, is there an issue about materializing only a chunk at a time (or a background actor-type reader that will prepare the materialize the next chunk asynchronously in between calls to `Next`)?
##########
File path: cpp/src/parquet/arrow/reader.h
##########
@@ -163,8 +165,11 @@ class PARQUET_EXPORT FileReader {
/// \brief Return a RecordBatchReader of row groups selected from
/// row_group_indices, whose columns are selected by column_indices. The
/// ordering in row_group_indices and column_indices matter.
+ /// Each row group will held in memory until each slice has been yielded as a
+ /// RecordBatch, at which point the next row group will be loaded. FileReaders must
+ /// outlive their RecordBatchReaders.
Review comment:
Add a TODO that this is considered to be a problem
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] bkietz commented on a change in pull request #7534: ARROW-8729: [C++][Dataset] Ensure non-empty batches when only virtual columns are projected
Posted by GitBox <gi...@apache.org>.
bkietz commented on a change in pull request #7534:
URL: https://github.com/apache/arrow/pull/7534#discussion_r453914180
##########
File path: cpp/src/parquet/arrow/reader.cc
##########
@@ -738,68 +749,90 @@ Status GetReader(const SchemaField& field, const std::shared_ptr<ReaderContext>&
END_PARQUET_CATCH_EXCEPTIONS
}
-Status FileReaderImpl::GetRecordBatchReader(const std::vector<int>& row_group_indices,
+Status FileReaderImpl::GetRecordBatchReader(const std::vector<int>& row_groups,
const std::vector<int>& column_indices,
std::unique_ptr<RecordBatchReader>* out) {
- // row group indices check
- for (int row_group_index : row_group_indices) {
- RETURN_NOT_OK(BoundsCheckRowGroup(row_group_index));
- }
+ RETURN_NOT_OK(BoundsCheck(row_groups, column_indices));
- // column indices check
- ARROW_ASSIGN_OR_RAISE(std::vector<int> field_indices,
- manifest_.GetFieldIndices(column_indices));
+ if (reader_properties_.pre_buffer()) {
+ // PARQUET-1698/PARQUET-1820: pre-buffer row groups/column chunks if enabled
+ BEGIN_PARQUET_CATCH_EXCEPTIONS
+ reader_->PreBuffer(row_groups, column_indices, reader_properties_.async_context(),
+ reader_properties_.cache_options());
+ END_PARQUET_CATCH_EXCEPTIONS
+ }
+ std::vector<std::shared_ptr<ColumnReaderImpl>> readers;
std::shared_ptr<::arrow::Schema> batch_schema;
- RETURN_NOT_OK(GetSchema(&batch_schema));
+ RETURN_NOT_OK(GetFieldReaders(column_indices, row_groups, &readers, &batch_schema));
+
+ if (readers.empty()) {
+ // Just generate all batches right now; they're cheap since they have no columns.
+ int64_t batch_size = properties().batch_size();
+ auto max_sized_batch =
+ ::arrow::RecordBatch::Make(batch_schema, batch_size, ::arrow::ArrayVector{});
+
+ ::arrow::RecordBatchVector batches;
+
+ for (int row_group : row_groups) {
+ int64_t num_rows = parquet_reader()->metadata()->RowGroup(row_group)->num_rows();
- // filter to only arrow::Fields which contain the selected physical columns
- {
- ::arrow::FieldVector selected_fields;
+ batches.insert(batches.end(), num_rows / batch_size, max_sized_batch);
- for (int field_idx : field_indices) {
- selected_fields.push_back(batch_schema->field(field_idx));
+ if (int64_t trailing_rows = num_rows % batch_size) {
+ batches.push_back(max_sized_batch->Slice(0, trailing_rows));
+ }
}
- batch_schema = ::arrow::schema(std::move(selected_fields));
- }
+ *out = ::arrow::internal::make_unique<RowGroupRecordBatchReader>(
+ ::arrow::MakeVectorIterator(std::move(batches)), std::move(batch_schema));
- if (reader_properties_.pre_buffer()) {
- // PARQUET-1698/PARQUET-1820: pre-buffer row groups/column chunks if enabled
- BEGIN_PARQUET_CATCH_EXCEPTIONS
- reader_->PreBuffer(row_group_indices, column_indices,
- reader_properties_.async_context(),
- reader_properties_.cache_options());
- END_PARQUET_CATCH_EXCEPTIONS
+ return Status::OK();
}
using ::arrow::RecordBatchIterator;
- // NB: This lambda will be invoked lazily whenever a new row group must be
- // scanned, so it must capture `column_indices` by value (it will not
- // otherwise outlive the scope of `GetRecordBatchReader()`). `this` is a non-owning
- // pointer so we are relying on the parent FileReader outliving this RecordBatchReader.
- auto row_group_index_to_batch_iterator =
- [column_indices, this](const int* i) -> ::arrow::Result<RecordBatchIterator> {
- std::shared_ptr<::arrow::Table> table;
- RETURN_NOT_OK(RowGroup(*i)->ReadTable(column_indices, &table));
-
- auto table_reader = std::make_shared<::arrow::TableBatchReader>(*table);
- table_reader->set_chunksize(properties().batch_size());
-
- // NB: explicitly preserve table so that table_reader doesn't outlive it
- return ::arrow::MakeFunctionIterator(
- [table, table_reader] { return table_reader->Next(); });
- };
-
- ::arrow::Iterator<RecordBatchIterator> row_group_batches =
- ::arrow::MakeMaybeMapIterator(
- std::move(row_group_index_to_batch_iterator),
- ::arrow::MakeVectorPointingIterator(row_group_indices));
+ // NB: This lambda will be invoked outside the scope of this call to
+ // `GetRecordBatchReader()`, so it must capture `readers` and `batch_schema` by value.
+ // `this` is a non-owning pointer so we are relying on the parent FileReader outliving
+ // this RecordBatchReader.
+ ::arrow::Iterator<RecordBatchIterator> batches = ::arrow::MakeFunctionIterator(
+ [readers, batch_schema, this]() -> ::arrow::Result<RecordBatchIterator> {
+ // Get the next chunks for each column
+ // (chunks[i] contains the chunks for column i).
+ std::vector<::arrow::ArrayVector> chunks(readers.size());
+ for (size_t i = 0; i < readers.size(); ++i) {
+ std::shared_ptr<ChunkedArray> chunk;
+ do {
+ RETURN_NOT_OK(readers[i]->NextBatch(properties().batch_size(), &chunk));
+ if (chunk == nullptr) {
+ return ::arrow::IterationTraits<RecordBatchIterator>::End();
+ }
+ } while (chunk->length() == 0);
Review comment:
IMHO this check should be internal to the ColumnReaders. I tried embedding it in TransferColumnData but discovered that other location in the codebase rely on empty chunks. Is this expected or should it be fixed?
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] bkietz commented on a change in pull request #7534: ARROW-8729: [C++][Dataset] Ensure non-empty batches when only virtual columns are projected
Posted by GitBox <gi...@apache.org>.
bkietz commented on a change in pull request #7534:
URL: https://github.com/apache/arrow/pull/7534#discussion_r445625710
##########
File path: cpp/src/parquet/arrow/reader.cc
##########
@@ -338,22 +348,39 @@ class RowGroupRecordBatchReader : public ::arrow::RecordBatchReader {
// TODO (hatemhelal): Consider refactoring this to share logic with ReadTable as this
// does not currently honor the use_threads option.
std::vector<std::shared_ptr<ChunkedArray>> columns(field_readers_.size());
- for (size_t i = 0; i < field_readers_.size(); ++i) {
- RETURN_NOT_OK(field_readers_[i]->NextBatch(batch_size_, &columns[i]));
- if (columns[i]->num_chunks() > 1) {
- return Status::NotImplemented("This class cannot yet iterate chunked arrays");
+ int64_t num_rows = -1;
+
+ if (columns.empty()) {
+ // num_rows cannot be derived from field_readers_ so compute it using
+ // row group sizes cached from metadata
+ num_rows = std::min(batch_size_, *row_group_remaining_size_);
+ *row_group_remaining_size_ -= num_rows;
+ if (*row_group_remaining_size_ == 0) {
+ ++row_group_remaining_size_;
}
+ } else {
+ for (size_t i = 0; i < field_readers_.size(); ++i) {
+ RETURN_NOT_OK(field_readers_[i]->NextBatch(batch_size_, &columns[i]));
+ if (columns[i]->num_chunks() > 1) {
+ return Status::NotImplemented("This class cannot yet iterate chunked arrays");
+ }
+ }
+ num_rows = columns[0]->length();
}
// Create an intermediate table and use TableBatchReader as an adaptor to a
// RecordBatch
- std::shared_ptr<Table> table = Table::Make(schema_, columns);
+ std::shared_ptr<Table> table = Table::Make(schema_, columns, num_rows);
+
RETURN_NOT_OK(table->Validate());
::arrow::TableBatchReader table_batch_reader(*table);
return table_batch_reader.ReadNext(out);
}
private:
+ std::shared_ptr<FileMetaData> metadata_;
Review comment:
I'll remove it and rebase
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] jorisvandenbossche commented on pull request #7534: ARROW-8729: [C++][Dataset] Ensure non-empty batches when only virtual columns are projected
Posted by GitBox <gi...@apache.org>.
jorisvandenbossche commented on pull request #7534:
URL: https://github.com/apache/arrow/pull/7534#issuecomment-649501921
Hmm, it failed on the last commit as well, but I restarted that one. And so now appears to be green indeed ..
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] wesm commented on pull request #7534: ARROW-8729: [C++][Dataset] Ensure non-empty batches when only virtual columns are projected
Posted by GitBox <gi...@apache.org>.
wesm commented on pull request #7534:
URL: https://github.com/apache/arrow/pull/7534#issuecomment-657278975
I think https://github.com/apache/arrow/pull/7704 needs to be merged first
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] wesm edited a comment on pull request #7534: ARROW-8729: [C++][Dataset] Ensure non-empty batches when only virtual columns are projected
Posted by GitBox <gi...@apache.org>.
wesm edited a comment on pull request #7534:
URL: https://github.com/apache/arrow/pull/7534#issuecomment-649579503
That crash is ARROW-8999. I'm fairly confident it's a real bug given that it happens about 1-5% of the time
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] jorisvandenbossche commented on pull request #7534: ARROW-8729: [C++][Dataset] Ensure non-empty batches when only virtual columns are projected
Posted by GitBox <gi...@apache.org>.
jorisvandenbossche commented on pull request #7534:
URL: https://github.com/apache/arrow/pull/7534#issuecomment-649482676
The python dataset tests are crashing on Mac: https://github.com/apache/arrow/runs/806974457
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] wesm closed pull request #7534: ARROW-8729: [C++][Dataset] Ensure non-empty batches when only virtual columns are projected
Posted by GitBox <gi...@apache.org>.
wesm closed pull request #7534:
URL: https://github.com/apache/arrow/pull/7534
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org
[GitHub] [arrow] github-actions[bot] commented on pull request #7534: ARROW-8729: [C++][Dataset] Ensure non-empty batches when only virtual columns are projected
Posted by GitBox <gi...@apache.org>.
github-actions[bot] commented on pull request #7534:
URL: https://github.com/apache/arrow/pull/7534#issuecomment-649022873
https://issues.apache.org/jira/browse/ARROW-8729
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
users@infra.apache.org