apache / apache/datafusion-python
Expose SessionContext.create_physical_expr for logical-to-physical Expr conversion
- Linguagem predominante
- Python
- Estrelas
- 604
- Forks
- 174
- Merge médio
- 1d 7h
- PRs com merge (30d)
- 4
Descrição
## Background
`SessionContext::create_physical_expr` converts a logical `Expr` against a `DFSchema` into a `PhysicalExpr` that can be evaluated directly against Arrow record batches. The Python bindings do not expose this.
## Upstream signature
```rust
pub fn create_physical_expr(
&self,
expr: Expr,
input_dfschema: &DFSchema,
) -> Result>
```
## User value
Useful when callers want to evaluate an Expr against an in-memory RecordBatch without going through DataFrame execution -- for example to score / filter individual batches in a custom processing loop, to debug optimization rewrites, or to feed an expression into a custom physical operator. Niche but irreplaceable for that audience.
## Why deferred
Effort is small (~180-280 LOC) but requires a new `PyPhysicalExpr` wrapper exposing the opaque `Arc` trait object plus an `evaluate(batch) -> ColumnarValue` method to make it useful from Python. Zero open user requests at the time of audit. Filed for tracking; revisit when a user surfaces a concrete need or when adjacent FFI work pulls `PhysicalExpr` into the binding surface.
Guia de contribuição
Nenhum guia de contribuição indexado para este repositório
Direção de pesquisa
Start with SessionContext::create_physical_expr and the proposed PyPhysicalExpr entry point; trace how the Python bindings handle Expr, DFSchema, RecordBatch, and ColumnarValue. Done means Python can create a physical expression from an Expr and DFSchema, call evaluate(batch), and receive a ColumnarValue.
Escrita pelo modelo de indexação a partir do texto da issue.
Avaliação
- Stack de tecnologia
- python, rust
- Domínio
- api, backend
- Tipo de issue
- Funcionalidade
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Status de atividade
- Pouca atividade
- Clareza
- Razoavelmente clara
- Facilidade para iniciantes
- 48/100