52 lines
1.3 KiB
Python
52 lines
1.3 KiB
Python
"""Query and display the first 10 rows of a recording."""
|
|
|
|
import atexit
|
|
import math
|
|
import os
|
|
import tempfile
|
|
|
|
from datafusion import col
|
|
|
|
import rerun as rr
|
|
|
|
# should be a cross-platform way to generate a rrd path.
|
|
RRD_PATH = tempfile.mktemp(suffix=".rrd")
|
|
atexit.register(
|
|
lambda: os.unlink(RRD_PATH) if os.path.exists(RRD_PATH) else None
|
|
)
|
|
|
|
# region: setup
|
|
# create some data
|
|
times = list(range(64))
|
|
scalars = [math.sin(t / 10.0) for t in times]
|
|
|
|
# log the data to a temporary recording
|
|
with rr.RecordingStream("rerun_example_dataframe_query") as rec:
|
|
rec.save(RRD_PATH)
|
|
rec.send_columns(
|
|
"/data",
|
|
indexes=[rr.TimeColumn("step", sequence=times)],
|
|
columns=rr.Scalars.columns(scalars=scalars),
|
|
)
|
|
# endregion: setup
|
|
|
|
|
|
# region: query
|
|
# load the demo recording in a temporary catalog
|
|
with rr.server.Server(datasets={"dataset": [RRD_PATH]}) as server:
|
|
# obtain a dataset from the catalog
|
|
dataset = server.client().get_dataset("dataset")
|
|
|
|
# (optional) filter interesting data
|
|
dataset_view = dataset.filter_contents("/data")
|
|
|
|
# obtain a DataFusion dataframe
|
|
df = dataset_view.reader(index="step")
|
|
|
|
# (optional) filter rows using DataFusion expressions
|
|
df = df.filter(col("/data:Scalars:scalars")[0] > 0.95)
|
|
|
|
# execute the query
|
|
print(df) # or convert to Pandas, Polars, PyArrow, etc.
|
|
# endregion: query
|