Skip to main content

Actions Status PyPI Bytewax User Guide

Bytewax

Python Stateful Stream Processing Framework

Bytewax is a Python framework that simplifies event and stream processing. Because Bytewax couples the stream and event processing capabilities of Flink, Spark, and Kafka Streams with the friendly and familiar interface of Python, you can re-use the Python libraries you already know and love. Connect data sources, run stateful transformations and write to various different downstream systems with built-in connectors or existing Python libraries. Bytewax Dataflow Animation

How it all works

Bytewax is a Python framework and Rust distributed processing engine that uses a dataflow computational model to provide parallelizable stream processing and event processing capabilities similar to Flink, Spark, and Kafka Streams. You can use Bytewax for a variety of workloads from moving data à la Kafka Connect style all the way to advanced online machine learning workloads. Bytewax is not limited to streaming applications but excels anywhere that data can be distributed at the input and output.

Bytewax has an accompanying command line interface, waxctl, which supports the deployment of dataflows on cloud servers or Kubernetes. You can download it here.


Getting Started with Bytewax

pip install bytewax

Install waxctl

Dataflow, Input and Operators

A Bytewax dataflow is Python code that will represent an input, a series of processing steps, and an output. The inputs could range from a Kafka stream to a WebSocket and the outputs could vary from a data lake to a key-value store.

import json

from bytewax import operators as op
from bytewax.connectors.kafka import operators as kop
from bytewax.dataflow import Dataflow

Bytewax has input and output helpers for common input and output data sources but you can also create your own with the Sink and Source API.

At a high-level, the dataflow compute model is one in which a program execution is conceptualized as data flowing through a series of operator-based steps. Operators like map and filter are the processing primitives of Bytewax. Each of them gives you a “shape” of data transformation, and you give them regular Python functions to customize them to a specific task you need. See the documentation for a list of the available operators

BROKERS = ["localhost:19092"]
IN_TOPICS = ["in_topic"]
OUT_TOPIC = "out_topic"
ERR_TOPIC = "errors"


def deserialize(kafka_message):
    return json.loads(kafka_message.value)


def anonymize_email(event_data):
    event_data["email"] = "@".join(["******", event_data["email"].split("@")[-1]])
    return event_data


def remove_bytewax(event_data):
    return "bytewax" not in event_data["email"]


flow = Dataflow("kafka_in_out")
stream = kop.input("inp", flow, brokers=BROKERS, topics=IN_TOPICS)
# we can inspect the stream coming from the kafka topic to view the items within on std out for debugging
op.inspect("inspect-oks", stream.oks)
# we can also inspect kafka errors as a separate stream and raise an exception when one is encountered
errs = op.inspect("errors", stream.errs).then(op.raises, "crash-on-err")
deser_msgs = op.map("deserialize", stream.oks, deserialize)
anon_msgs = op.map("anon", deser_msgs, anonymize_email)
filtered_msgs = op.filter("filter_employees", anon_msgs, remove_bytewax)
processed = op.map("map", anon_msgs, lambda m: KafkaSinkMessage(None, json.dumps(m)))
# and finally output the cleaned data to a new topic
kop.output("out1", processed, brokers=BROKERS, topic=OUT_TOPIC)

Windowing, Reducing and Aggregating

Bytewax is a stateful stream processing framework, which means that some operations remember information across multiple events. Windows and aggregations are also stateful, and can be reconstructed in the event of failure. Bytewax can be configured with different state recovery mechanisms to durably persist state in order to recover from failure.

There are multiple stateful operators available like reduce, stateful_map and fold_window. The complete list can be found in the API documentation for all operators. Below we use the fold_window operator with a tumbling window based on system time to gather events and calculate the number of times events have occurred on a per-user basis.

from datetime import datetime, timedelta, timezone

from bytewax.dataflow import Dataflow
import bytewax.operators.windowing as win
from bytewax.operators.windowing import EventClock, TumblingWindower
from bytewax.testing import TestingSource

flow = Dataflow("window_eg")

src = [
    {"user_id": "123", "value": 5, "time": "2023-1-1T00:00:00Z"},
    {"user_id": "123", "value": 7, "time": "2023-1-1T00:00:01Z"},
    {"user_id": "123", "value": 2, "time": "2023-1-1T00:00:07Z"},
]
inp = op.input("inp", flow, TestingSource(src))
keyed_inp = op.key_on("keyed_inp", inp, lambda x: x["user_id"])


# This function instructs the event clock on how to retrieve the
# event's datetime from the input.
# Note that the datetime MUST be UTC. If the datetime is using a different
# representation, we would have to convert it here.
def get_event_time(event):
    return datetime.fromisoformat(event["time"])


# Configure the `fold_window` operator to use the event time.
clock = EventClock(get_event_time, wait_for_system_duration=timedelta(seconds=10))

# And a 5 seconds tumbling window
align_to = datetime(2023, 1, 1, tzinfo=timezone.utc)
windower = TumblingWindower(align_to=align_to, length=timedelta(seconds=5))

five_sec_buckets_win_out = win.collect_window(
    "five_sec_buckets", keyed_inp, clock, windower
)


def calc_avg(bucket):
    values = [event["value"] for event in bucket]
    if len(values) > 0:
        return sum(values) / len(values)
    else:
        return None


five_sec_avgs = op.map_value("avg_in_bucket", five_sec_buckets_win_out.down, calc_avg)

Merges and Joins

Merging or Joining multiple input streams is a common task for stream processing, Bytewax enables different types of joins to facilitate different patters.

Merging Streams

Merging streams is like concatenating, there is no logic and the resulting stream will potentially include heterogeneous records.

from bytewax import operators as op

from bytewax.connectors.stdio import StdOutSink
from bytewax.dataflow import Dataflow
from bytewax.testing import TestingSource

flow = Dataflow("merge")

src_1 = [
    {"user_id": "123", "name": "Bumble"},
]
inp1 = op.input("inp1", flow, TestingSource(src_1))

src_2 = [
    {"user_id": "123", "email": "bee@bytewax.com"},
    {"user_id": "456", "email": "hive@bytewax.com"},
]
inp2 = op.input("inp2", flow, TestingSource(src_2))
merged_stream = op.merge("merge", inp1, inp2)
op.inspect("debug", merged_stream)
Joining Streams

Joining streams is different than merging because it uses logic to join the records in the streams together. The joins in Bytewax can be running or not. A regular join in streaming is more closely related to an inner join in SQL in that the dataflow will emit data downstream from a join when all of the sides of the join have matched on the key.

from bytewax import operators as op

from bytewax.connectors.stdio import StdOutSink
from bytewax.dataflow import Dataflow
from bytewax.testing import TestingSource

flow = Dataflow("join")

src_1 = [
    {"user_id": "123", "name": "Bumble"},
]
inp1 = op.input("inp1", flow, TestingSource(src_1))
keyed_inp_1 = op.key_on("key_stream_1", inp1, lambda x: x["user_id"])
src_2 = [
    {"user_id": "123", "email": "bee@bytewax.com"},
    {"user_id": "456", "email": "hive@bytewax.com"},
]
inp2 = op.input("inp2", flow, TestingSource(src_2))
keyed_inp_2 = op.key_on("key_stream_2", inp2, lambda x: x["user_id"])

merged_stream = op.join("join", keyed_inp_1, keyed_inp_2)
op.inspect("debug", merged_stream)

Output

Output in Bytewax is described as a sink and these are grouped into connectors. There are a number of basic connectors in the Bytewax repo to help you during development. In addition to the built-in connectors, it is possible to use the input and output API to build a custom sink and source. There is also a hub for connectors built by the community, partners and Bytewax. Below is an example of a custom connector for Postgres using the psycopg2 library.

% skip: next

import psycopg2

from bytewax import operators as op
from bytewax.outputs import FixedPartitionedSink, StatefulSinkPartition


class PsqlSink(StatefulSinkPartition):
    def __init__(self):
        self.conn = psycopg2.connect("dbname=website user=bytewax")
        self.conn.set_session(autocommit=True)
        self.cur = self.conn.cursor()

    def write_batch(self, values):
        query_string = """
            INSERT INTO events (user_id, data)
            VALUES (%s, %s)
            ON CONFLICT (user_id)
            DO UPDATE SET data = %s;
        """
        self.cur.execute_values(query_string, values)

    def snapshot(self):
        pass

    def close(self):
        self.conn.close()


class PsqlOutput(FixedPartitionedSink):
    def list_parts(self):
        return ["single"]

    def build_part(step_id, for_part, resume_state):
        return PsqlSink()

Execution

Bytewax dataflows can be executed in a single Python process, or on multiple processes on multiple hosts with multiple worker threads. When processing data in a distributed fashion, Bytewax uses routing keys to ensure your state is updated in a correct way automatically.

# a single worker locally
python -m bytewax.run my_dataflow:flow

# Start two worker threads in a single process.
python -m bytewax.run my_dataflow -w 2

# Start a process on two separate machines to form a Bytewax cluster.
# Start the first process with two worker threads on `machine_one`.
machine_one$ python -m bytewax.run my_dataflow -w 2 -i0 -a "machine_one:2101;machine_two:2101"

# Then start the second process with three worker threads on `machine_two`.
machine_two$ python -m bytewax.run my_dataflow -w 3 -i1 -a "machine_one:2101;machine_two:2101"

It can also be run in a Docker container as described further in the documentation.

Kubernetes

The recommended way to run dataflows at scale is to leverage the kubernetes ecosystem. To help manage deployment, we built waxctl, which allows you to easily deploy dataflows that will run at huge scale across multiple compute nodes.

waxctl df deploy my_dataflow.py --name my-dataflow

Why Bytewax?

At a high level, Bytewax provides a few major benefits:

  • The operators in Bytewax are largely “data-parallel”, meaning they can operate on independent parts of the data concurrently.
  • Bytewax offers the ability to express higher-level control constructs, like iteration.
  • Bytewax allows you to develop and run your code locally, and then easily scale that code to multiple workers or processes without changes.
  • Bytewax can be used in both a streaming and batch context
  • Ability to leverage the Python ecosystem directly

Community

Slack is the main forum for communication and discussion.

GitHub Issues is reserved only for actual issues. Please use the community Slack for discussions.

Code of Conduct

More Examples

For a more complete example, and documentation on the available operators, check out the User Guide and the /examples folder.

License

Bytewax is licensed under the Apache-2.0 license.

Contributing

Contributions are welcome! This community and project would not be what it is without the contributors. All contributions, from bug reports to new features, are welcome and encouraged.

Please view the Contribution Guide for how to get started.



With ❤️ Bytewax

Release files for bytewax 0.21.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distributions (wheels)

Table of built distributions (wheels) for bytewax 0.21.1
File
bytewax-0.21.1-cp312-none-win_amd64.whl CPython 3.12 none Windows x86-64 Details
bytewax-0.21.1-cp312-cp312-manylinux_2_31_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.31+ x86-64 Details
bytewax-0.21.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARMv7l Details
bytewax-0.21.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64 Details
bytewax-0.21.1-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details
bytewax-0.21.1-cp312-cp312-macosx_10_12_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.12+ x86-64 Details
bytewax-0.21.1-cp311-none-win_amd64.whl CPython 3.11 none Windows x86-64 Details
bytewax-0.21.1-cp311-cp311-manylinux_2_31_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.31+ x86-64 Details
bytewax-0.21.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARMv7l Details
bytewax-0.21.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64 Details
bytewax-0.21.1-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details
bytewax-0.21.1-cp311-cp311-macosx_10_12_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.12+ x86-64 Details
bytewax-0.21.1-cp310-none-win_amd64.whl CPython 3.10 none Windows x86-64 Details
bytewax-0.21.1-cp310-cp310-manylinux_2_31_x86_64.whl CPython 3.10 CPython 3.10 Linux glibc 2.31+ x86-64 Details
bytewax-0.21.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARMv7l Details
bytewax-0.21.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.10 CPython 3.10 Linux glibc 2.17+ ARM64 Details
bytewax-0.21.1-cp310-cp310-macosx_11_0_arm64.whl CPython 3.10 CPython 3.10 macOS 11.0+ ARM64 Details
bytewax-0.21.1-cp310-cp310-macosx_10_12_x86_64.whl CPython 3.10 CPython 3.10 macOS 10.12+ x86-64 Details
bytewax-0.21.1-cp39-none-win_amd64.whl CPython 3.9 none Windows x86-64 Details
bytewax-0.21.1-cp39-cp39-manylinux_2_31_x86_64.whl CPython 3.9 CPython 3.9 Linux glibc 2.31+ x86-64 Details
bytewax-0.21.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ ARMv7l Details
bytewax-0.21.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.9 CPython 3.9 Linux glibc 2.17+ ARM64 Details
bytewax-0.21.1-cp39-cp39-macosx_11_0_arm64.whl CPython 3.9 CPython 3.9 macOS 11.0+ ARM64 Details
bytewax-0.21.1-cp39-cp39-macosx_10_12_x86_64.whl CPython 3.9 CPython 3.9 macOS 10.12+ x86-64 Details
bytewax-0.21.1-cp38-none-win_amd64.whl CPython 3.8 none Windows x86-64 Details
bytewax-0.21.1-cp38-cp38-manylinux_2_31_x86_64.whl CPython 3.8 CPython 3.8 Linux glibc 2.31+ x86-64 Details
bytewax-0.21.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl CPython 3.8 CPython 3.8 Linux glibc 2.17+ ARMv7l Details
bytewax-0.21.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.8 CPython 3.8 Linux glibc 2.17+ ARM64 Details
bytewax-0.21.1-cp38-cp38-macosx_11_0_arm64.whl CPython 3.8 CPython 3.8 macOS 11.0+ ARM64 Details
bytewax-0.21.1-cp38-cp38-macosx_10_12_x86_64.whl CPython 3.8 CPython 3.8 macOS 10.12+ x86-64 Details

Total release size: 205.0 MB

Release files / bytewax-0.21.1-cp312-none-win_amd64.whl

Download URL bytewax-0.21.1-cp312-none-win_amd64.whl
Size 5.2 MB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
9b3c44984fe76da1fbac941392103610f884523a733a43fcd74543927c179854
BLAKE2b-256 checksum
How to use checksums
debc82686047e63fa709dc084399230c430c4fd2f2f2de3cf8be8d339ebd3f21
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp312-cp312-manylinux_2_31_x86_64.whl

Download URL bytewax-0.21.1-cp312-cp312-manylinux_2_31_x86_64.whl
Size 8.0 MB
Tags CPython 3.12 Linux glibc 2.31+ x86-64
SHA-256 checksum
How to use checksums
a118a61a5fc5a1849605e062f80e897922dbdadd37790cf8379e8f1e000d463c
BLAKE2b-256 checksum
How to use checksums
1f6647d1dbdd2a035074b2be3eac983d15742cc2749fee24aa3cc0c505277622
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL bytewax-0.21.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 7.7 MB
Tags CPython 3.12 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
ba078e8bc7c6f1e7d7c99c4c07433977717b949112fc53377a0b0f3289398072
BLAKE2b-256 checksum
How to use checksums
87f257829eea0d188bd1d54e2555a11ecfd3589ec66d710c8163fb7010a0c82e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL bytewax-0.21.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 8.0 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
ed8da9bfceb3299df8cf4e8e7efbbda924dbbfea990dff50c8602a059dc8b9cf
BLAKE2b-256 checksum
How to use checksums
201c41b84d0de3949d75dd52b4b04341bed1c72250c4c1e017b527d7f7570f0b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp312-cp312-macosx_11_0_arm64.whl

Download URL bytewax-0.21.1-cp312-cp312-macosx_11_0_arm64.whl
Size 6.0 MB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
e3ab20069f323ffe508249d72c8c708cac05fddea11b74943103c623676785b6
BLAKE2b-256 checksum
How to use checksums
38ef4dd07083f32f9b019101837a10dc97806fbe3455c70f8cd976eb987dedab
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp312-cp312-macosx_10_12_x86_64.whl

Download URL bytewax-0.21.1-cp312-cp312-macosx_10_12_x86_64.whl
Size 6.1 MB
Tags CPython 3.12 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
62f5edef91908e555b70f3794271cd29ff29132a63b0b5cd367c5f53695a3c14
BLAKE2b-256 checksum
How to use checksums
41ebee253e60ab676e2a70aa306cffee67d6a6a40993c8467d3b83ea8bb91e99
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp311-none-win_amd64.whl

Download URL bytewax-0.21.1-cp311-none-win_amd64.whl
Size 5.2 MB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
7ede7d3b1626fb65a584a0d8944244da329a64a6f974ab386b12243dc934b52d
BLAKE2b-256 checksum
How to use checksums
90a9e06af46d9d0122c235abd9604e1fd286adf464450f18d726e9b36cba7e94
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp311-cp311-manylinux_2_31_x86_64.whl

Download URL bytewax-0.21.1-cp311-cp311-manylinux_2_31_x86_64.whl
Size 8.0 MB
Tags CPython 3.11 Linux glibc 2.31+ x86-64
SHA-256 checksum
How to use checksums
877f63068c963b62d2171302d1fc1b7aa221c40087c7b2478e4ba4e50e26eb1e
BLAKE2b-256 checksum
How to use checksums
b2dd6c2d93f9c699f36462e37611b9e370d099953b6ab9f7171bd504db0c3567
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL bytewax-0.21.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 7.7 MB
Tags CPython 3.11 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
9495b4a677f6675a70790c66176646a4994ca5af82624703292e54b0e45d5682
BLAKE2b-256 checksum
How to use checksums
31e57f7775dd2a2f64e454a215cfab3bd5955241a261dd4c1f055c7cf6497f49
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL bytewax-0.21.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 8.0 MB
Tags CPython 3.11 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
e809e15308262679c3366b262a56675f699bd53cc0ff41b0e124768c59232e94
BLAKE2b-256 checksum
How to use checksums
b5aa00658c797fcc28a1bba208b8bf92fc6892059b75ece180894a4cd17ed4b3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp311-cp311-macosx_11_0_arm64.whl

Download URL bytewax-0.21.1-cp311-cp311-macosx_11_0_arm64.whl
Size 6.0 MB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
87f01bd8e92a873e84fb98959bd53c0ef955fcd9f8b9d0f6c0945014bc7f59d0
BLAKE2b-256 checksum
How to use checksums
2fcf3d2e7a19dda70a0399f690b87419ce57d5f04d0693941f157edc4feb9cef
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp311-cp311-macosx_10_12_x86_64.whl

Download URL bytewax-0.21.1-cp311-cp311-macosx_10_12_x86_64.whl
Size 6.1 MB
Tags CPython 3.11 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
c53a7fd5b2c4dc30f7574c85f9e7dd017c2365c05f714cf5215871dea190199c
BLAKE2b-256 checksum
How to use checksums
147aa102ec999fb53634589e186b03fc25904ed64d632840714f8085ba2a007f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp310-none-win_amd64.whl

Download URL bytewax-0.21.1-cp310-none-win_amd64.whl
Size 5.2 MB
Tags CPython 3.10 Windows x86-64
SHA-256 checksum
How to use checksums
0f493c652e56818adfc08c8810bc8b7f82e3ccef27657592174ec3ebcb573a2b
BLAKE2b-256 checksum
How to use checksums
30ee5f5cd1b70e4075ac47748af90e5a1f0d762c57967275a85ed9b1474f8d45
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp310-cp310-manylinux_2_31_x86_64.whl

Download URL bytewax-0.21.1-cp310-cp310-manylinux_2_31_x86_64.whl
Size 8.0 MB
Tags CPython 3.10 Linux glibc 2.31+ x86-64
SHA-256 checksum
How to use checksums
eb68cd383055e1bdd4a59f8d0af23b4ad7b4cac44bcbabe6a7ebf15e91d45e7c
BLAKE2b-256 checksum
How to use checksums
07b9f23b63ae0de435fde75a887039f190f2375be957d472411d54cfebda36cf
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL bytewax-0.21.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 7.7 MB
Tags CPython 3.10 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
58256f469523107d3b279437fc4e4780ab1b15e93abd05e3370f7aa2e620edf9
BLAKE2b-256 checksum
How to use checksums
df7e5a33059f9514a06e918978802ebc9b402fc00496882ef122913847c6c468
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL bytewax-0.21.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 8.0 MB
Tags CPython 3.10 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
565872264935a7b780f3b5424a1623d1dfdbfa1d7c817fb2b487e167db03fd61
BLAKE2b-256 checksum
How to use checksums
85a56f480c2c2ce059bbec4fb461361006f2fe2e34e018b763d2d7d1372e6b09
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp310-cp310-macosx_11_0_arm64.whl

Download URL bytewax-0.21.1-cp310-cp310-macosx_11_0_arm64.whl
Size 6.0 MB
Tags CPython 3.10 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
ad1196efe8809173a094e5e0bd8487bb903bca121c2b84b118a7c10b0007ee77
BLAKE2b-256 checksum
How to use checksums
6c705582e6d81e0c1254257136d28be29f4395edf900cb44f76b58d8050b78c6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp310-cp310-macosx_10_12_x86_64.whl

Download URL bytewax-0.21.1-cp310-cp310-macosx_10_12_x86_64.whl
Size 6.1 MB
Tags CPython 3.10 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
162e7f39adadbb8d53490bc7eee8dc8a7a815b58dba2b6a4e2d5c0d0c7bb5550
BLAKE2b-256 checksum
How to use checksums
9aaf01da47f0ebb65bf31d964181898106e800aea58d5d32dd91942ee05a2d75
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp39-none-win_amd64.whl

Download URL bytewax-0.21.1-cp39-none-win_amd64.whl
Size 5.2 MB
Tags CPython 3.9 Windows x86-64
SHA-256 checksum
How to use checksums
324b2995ad964b1dd8f9f0a87fcce0a8e5d8fb17ee6bd6db7e1501ecb7abc358
BLAKE2b-256 checksum
How to use checksums
942612df442037157d0319092c833a9161623ea267f443603009d835f9a9139a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp39-cp39-manylinux_2_31_x86_64.whl

Download URL bytewax-0.21.1-cp39-cp39-manylinux_2_31_x86_64.whl
Size 8.0 MB
Tags CPython 3.9 Linux glibc 2.31+ x86-64
SHA-256 checksum
How to use checksums
8b53f5fc3a1fd76be5659c71fd079a835747fd3b230ab9f06b9ecca86f2e13c3
BLAKE2b-256 checksum
How to use checksums
3030c84addd87cdafb1874399ac3b5cd3972067c75099ab93c04727b900f11c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL bytewax-0.21.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 7.7 MB
Tags CPython 3.9 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
fe4fd34b59f899fa8dca1c9c7408c34188b6adcbe346c9f2b669106e086c2820
BLAKE2b-256 checksum
How to use checksums
896cf89f0088dbf083e6f3e685de735e887996dd57e55d65da329461e866bc06
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL bytewax-0.21.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 8.0 MB
Tags CPython 3.9 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
0a4f615d94b4dc6a3ed4afb2d23818abc500648f4245ac2ab39d4872e77ae5d5
BLAKE2b-256 checksum
How to use checksums
c1c6f0f45fee7039e8da37e020de00545644013b067d5ea86b09ab3cdcd5f6f4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp39-cp39-macosx_11_0_arm64.whl

Download URL bytewax-0.21.1-cp39-cp39-macosx_11_0_arm64.whl
Size 6.1 MB
Tags CPython 3.9 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
9723c597845aef7dc319f960ca11a5d40705c49d6700a82a75224051b03f7263
BLAKE2b-256 checksum
How to use checksums
c1898ebf0eb8c85b50a8728ae391745523ffc7af1645a02aed55c26804e81307
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp39-cp39-macosx_10_12_x86_64.whl

Download URL bytewax-0.21.1-cp39-cp39-macosx_10_12_x86_64.whl
Size 6.1 MB
Tags CPython 3.9 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
5a1848100ac81addc20ed71669097eed6fa66fe52c994dbd02063f60f622494b
BLAKE2b-256 checksum
How to use checksums
d2d740eb9cd20766a4324faf8f58a7cabb3ca5d115d162344cf7014b7258b71c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp38-none-win_amd64.whl

Download URL bytewax-0.21.1-cp38-none-win_amd64.whl
Size 5.2 MB
Tags CPython 3.8 Windows x86-64
SHA-256 checksum
How to use checksums
f4d866c7cb6dd8faacc8e9120e073491188f642ac8100f637a6830f3b83cd8e9
BLAKE2b-256 checksum
How to use checksums
adc5f3b4932c791c351079a154de905f0c43153100ed6b23cb7bc63f10fe57ee
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp38-cp38-manylinux_2_31_x86_64.whl

Download URL bytewax-0.21.1-cp38-cp38-manylinux_2_31_x86_64.whl
Size 8.0 MB
Tags CPython 3.8 Linux glibc 2.31+ x86-64
SHA-256 checksum
How to use checksums
9632601c3a5d6f94dfae978d3132b24a40354e073197e6dfae96055ff08a0588
BLAKE2b-256 checksum
How to use checksums
9778453ca607ed160788ac829b29b348963f1a5cd682996d4a2cb7d80922feb9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl

Download URL bytewax-0.21.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Size 7.7 MB
Tags CPython 3.8 Linux glibc 2.17+ ARMv7l
SHA-256 checksum
How to use checksums
e68c1d7b6600442c4b79d1768f6f7a870b0faf0fa5f4d1dc48fda27855ce93b6
BLAKE2b-256 checksum
How to use checksums
bcf956645a43932aa6b1ab286536f8d1d5b08e9f4b776da89d0b0dcb02fa49cc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL bytewax-0.21.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 8.0 MB
Tags CPython 3.8 Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
1781d296add64a7b44812ab3cc22eba8174b9ea8a1e231b9c12e98e363033965
BLAKE2b-256 checksum
How to use checksums
ebf81571571050fe731ec992b764e980b39a21a3515a12c1cbc8f20a21fa5a9e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp38-cp38-macosx_11_0_arm64.whl

Download URL bytewax-0.21.1-cp38-cp38-macosx_11_0_arm64.whl
Size 6.1 MB
Tags CPython 3.8 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
1eae19be85155358cd7d50d5dbb54c644a263fe80a2aa883f9db7f6cb5d15ba3
BLAKE2b-256 checksum
How to use checksums
f730cd10a200cc31681d53bb14bcc750eb525cebfdfd15f3d23e7e0527db5507
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20

Release files / bytewax-0.21.1-cp38-cp38-macosx_10_12_x86_64.whl

Download URL bytewax-0.21.1-cp38-cp38-macosx_10_12_x86_64.whl
Size 6.1 MB
Tags CPython 3.8 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
4bc9ba686a52fb3a76b9e0330bc58f35719b514b4ee7cf04792b45e718e9339c
BLAKE2b-256 checksum
How to use checksums
386194cc5f8d280264801cbceff8b0200d90c5ed94661b853b514f88d6cb24c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.1.1 CPython/3.9.20
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page