【发布时间】:2021-12-17 13:40:58
【问题描述】:
在我循环遍历箭头数组的元素并尝试将计算函数应用于每个标量,这将告诉我每个元素的年、月、日等。代码如下所示:
arrow::NumericArray<arrow::Date32Type> array = {...}
for (int64_t i = 0; i < array.length(); i++) {
arrow::Result<std::shared_ptr<arrow::Scalar>> result = array->GetScalar(i);
if (!result.ok()) {
// TODO: handle error
}
arrow::Result<arrow::Datum> year = arrow::compute::Year(*result);
}
但是,我不太清楚如何从arrow::compute::Year 调用中提取实际的 int64_t 值。我试图做类似的事情
const std::shared_ptr<int64_t> val = year.ValueOrDie();
>>> 'arrow::Datum' to non-scalar type 'const std::shared_ptr<long int>' requested
我也尝试过类似地分配给int64_t,但error: cannot convert 'arrow::Datum' to 'int64_t' 也失败了
我没有看到 Datum 类的任何方法,否则会返回原始类型的标量值,我认为 arrow::compute::Year 应该返回。知道我可能对 Datum / Scalar / Compute API 有什么误解吗?
【问题讨论】:
标签: c++ apache-arrow