Skip to main content

No project description provided

Project description

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.window as win
from bytewax.operators.window import EventClockConfig, TumblingWindow
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 = EventClockConfig(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 = TumblingWindow(align_to=align_to, length=timedelta(seconds=5))

five_sec_buckets = 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, 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 heterogenous 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 slack community for discussions.

Code of Conduct

Usage

Install the latest release with pip:

pip install bytewax

Building From Source

To build a specific branch, you will need to use Maturin and have Rust installed on your machine. Once those have been installed run

maturin develop -E dev

Important: If you are testing with a maturin built version from source, you should use maturin build --release since maturin develop will be slower.

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 guidelines before getting started.



With ❤️ Bytewax

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

bytewax-0.19.1-cp312-none-win_amd64.whl (5.3 MB view details)

Uploaded CPython 3.12Windows x86-64

bytewax-0.19.1-cp312-cp312-manylinux_2_31_x86_64.whl (8.2 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.31+ x86-64

bytewax-0.19.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (7.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARMv7l

bytewax-0.19.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.1 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

bytewax-0.19.1-cp312-cp312-macosx_11_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

bytewax-0.19.1-cp312-cp312-macosx_10_12_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

bytewax-0.19.1-cp311-none-win_amd64.whl (5.3 MB view details)

Uploaded CPython 3.11Windows x86-64

bytewax-0.19.1-cp311-cp311-manylinux_2_31_x86_64.whl (8.2 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.31+ x86-64

bytewax-0.19.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (7.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARMv7l

bytewax-0.19.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.1 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

bytewax-0.19.1-cp311-cp311-macosx_11_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

bytewax-0.19.1-cp311-cp311-macosx_10_12_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

bytewax-0.19.1-cp310-none-win_amd64.whl (5.3 MB view details)

Uploaded CPython 3.10Windows x86-64

bytewax-0.19.1-cp310-cp310-manylinux_2_31_x86_64.whl (8.2 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.31+ x86-64

bytewax-0.19.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (7.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARMv7l

bytewax-0.19.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.1 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

bytewax-0.19.1-cp310-cp310-macosx_11_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

bytewax-0.19.1-cp310-cp310-macosx_10_12_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

bytewax-0.19.1-cp39-none-win_amd64.whl (5.3 MB view details)

Uploaded CPython 3.9Windows x86-64

bytewax-0.19.1-cp39-cp39-manylinux_2_31_x86_64.whl (8.2 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.31+ x86-64

bytewax-0.19.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (7.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARMv7l

bytewax-0.19.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.1 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

bytewax-0.19.1-cp39-cp39-macosx_11_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

bytewax-0.19.1-cp39-cp39-macosx_10_12_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

bytewax-0.19.1-cp38-none-win_amd64.whl (5.3 MB view details)

Uploaded CPython 3.8Windows x86-64

bytewax-0.19.1-cp38-cp38-manylinux_2_31_x86_64.whl (8.2 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.31+ x86-64

bytewax-0.19.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (7.8 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARMv7l

bytewax-0.19.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.1 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

bytewax-0.19.1-cp38-cp38-macosx_11_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

bytewax-0.19.1-cp38-cp38-macosx_10_12_x86_64.whl (6.2 MB view details)

Uploaded CPython 3.8macOS 10.12+ x86-64

File details

Details for the file bytewax-0.19.1-cp312-none-win_amd64.whl.

File metadata

  • Download URL: bytewax-0.19.1-cp312-none-win_amd64.whl
  • Upload date:
  • Size: 5.3 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for bytewax-0.19.1-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 3a2a0af89dd25919152faa0d4ad11694ab273070da8bb966a4c606358daa1a66
MD5 9451d909d7b5ded8b227d63d647f99da
BLAKE2b-256 643eafd90de10ec0e22403532d87ba3a97baa51e3346fad46429f4e3b3bb2e0f

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp312-cp312-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp312-cp312-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 222813fdadd76834d69e1bb65ec41908001f523b8c5e3e6a3a242b9cf004ddab
MD5 7a9a5c9fa5c28221201b0c003a2d7883
BLAKE2b-256 e8c906670c4ee90c1c2d96f5619e073d3b973fb98c862e2af6eb3faf4ba164c4

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 202036d5192bafbd764b0ddea886eec9d739e819a97f277e8a43884e808ebe06
MD5 bbfc5e4043c2c604d4f58f824fffebd5
BLAKE2b-256 528cec2ffd3a9b1c2dbd1e322bf665b6f6efba0001c442e73671b1249296e992

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8ee8302ef6e113232e222a8d50b018085372c927e0322203109df24eb53dbfed
MD5 8d61ca9caceea041fcf9641c0f47c5ea
BLAKE2b-256 a428a3987b7ab5aba4634efcb3ecc265e520014495bed110f4b018202c285979

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3c1276e843c724dc3876b7401405df23e3269071f2fd4a1eabb751dd77496d34
MD5 827fc006d8c3db10748b8ee3cc3410cc
BLAKE2b-256 02e65798ae29eb9f0334c87bd53950be1014626215fdbaa54a9d5cfada25f265

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d92c74d72277d67517d09b2c2ba7328022247ce84b57a2a4c2b38e6b5fc5f931
MD5 9767bb3d82ac1b3b6706dece54fc3785
BLAKE2b-256 0ff37c6f58e1bd670788a30fdd4b9dc6f75a4120c66491db023168654ab7429d

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp311-none-win_amd64.whl.

File metadata

  • Download URL: bytewax-0.19.1-cp311-none-win_amd64.whl
  • Upload date:
  • Size: 5.3 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for bytewax-0.19.1-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 b40ad44f0081aec617335b2b608a18b41995b18ddc614e2543abd0294d084b4d
MD5 ddf0e9362fc3f027df7aa6541a08378d
BLAKE2b-256 e16368305ef3b0e1067d54a60449340605f6a5e9b44438093b13c6581c8cd9d6

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp311-cp311-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp311-cp311-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 fc01278a9116b0b391daf8e14422ab0251f1c95c8b6532372f66afb453b2dff4
MD5 49886e85204d0f2c85a256ae29472d98
BLAKE2b-256 c2bee0f96fe9fcdaaa65be3b89f871234e77cfd17f3b17e5d06678f7998a025e

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 0d7689794a33f3a4d9d383bf547bca5f2939e1f17bdeb9ace12759495d978ddf
MD5 9debb3e8a33336ea8db3a901674f1c4c
BLAKE2b-256 ab5a471ae2ed5f5238f84c74263692c94e491874ae7eb846caeb42342972e5d3

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 44fc0d387a2dbd91b12edcf6b7570a780c5f0b383ba9e728a85b6f91b6eafe73
MD5 53199a592e9b99264382443b4657e1bf
BLAKE2b-256 4948f47ac61aca6afa1c7144aa410e06b4f2494a3194fdea89e73fa4fcd7575e

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 bae511307a2c1c5027b365136cbe3e126ca51055927d31519bb894e598fb166f
MD5 d0997cf018453d5943f687253ef59e95
BLAKE2b-256 57aec3c52f66effbf3f9fdb5b23cb02125a9207a126bd535b0f20b76025cc095

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 1fac0901106b1be851cf0bea6a6c7b2c69919e426bef10c281f71c8795c5444e
MD5 f8958ab21f770ecd4351b57daba6ae35
BLAKE2b-256 c7e40e6461b5e0698020470435b91579b4f8113bffdb2a4b501942f3ae8f1c9b

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp310-none-win_amd64.whl.

File metadata

  • Download URL: bytewax-0.19.1-cp310-none-win_amd64.whl
  • Upload date:
  • Size: 5.3 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for bytewax-0.19.1-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 ad19fe19a128c9b4883e77e1479a72df729117f02164f741ffd587ab52da20d7
MD5 71736b03ae95203e98e99f9f0e6b4f76
BLAKE2b-256 3f4248f92f391b32f94c4c3f8a8f3cfa5cc501e68284675021c15680d277d171

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp310-cp310-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp310-cp310-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 e88037d6aff46e194346020cb2aefc47829e35ec48318fc377c4f8a9317a87b1
MD5 7a2340ae3f74014c38fad12ebec9597f
BLAKE2b-256 41ec115231f6b2379992c42e4ce945067495f3ce0c579a5aa55e3e1246131abe

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 22072ef551de5c66f86fa5f489415b2f665a912c7ae2356fbd3d52486d6110d7
MD5 c07e2e7c3d041f288e896652442ce490
BLAKE2b-256 cacc3048d3f39cd5c6e562816d1888f4f9151f7786cecfa631b9dabc5b7ab34b

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 46f7755809fdc7bc2a59e40a633bcc48a3072d85050e8f36f3b3c901efdb6a07
MD5 e8ff7ec039e0286bae5bd56c34696efd
BLAKE2b-256 a4aa5acd3108c8469751095ff2d8debd5af07dccd87675b160b0c1ac3dd12b77

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d5f793537e6807dd75e4ed3fc71cb05f5667b9efdc5fbcf9b3178b3afad7df98
MD5 07772b831b562b2875063bf9f3e4a59f
BLAKE2b-256 f502ae6a326edd5f6bd147d1054af6b0accf23633bca82f6e39bb6d5864f3e8c

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 48606da5a8013ff5cfc912f4b96900008432af00bc210ac02c7003600e7873ee
MD5 a10a23812756055696fa4d1adbae8b9b
BLAKE2b-256 04ac6553d6983ad0ca3dec8e38d438542d9d75bad73ccc0d31d2528efc191ebe

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp39-none-win_amd64.whl.

File metadata

  • Download URL: bytewax-0.19.1-cp39-none-win_amd64.whl
  • Upload date:
  • Size: 5.3 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for bytewax-0.19.1-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 97bc286659c260c84a48426f257ee7e19ab45152742b8fa97d034bb4cf6715d1
MD5 5225fdec2f290eb3ba6cdc641293f6f4
BLAKE2b-256 858bef843a4147ded165505657e3b8a388872458495c9637a18610225961df12

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp39-cp39-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp39-cp39-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 cddc41c8e3f731aa6cf664ee38d5da182e685cee9db5d981f0273b1940e4059c
MD5 316d0be387310cf06219c3b24e9dd77a
BLAKE2b-256 9f54386f3c16328bb80c0a47f2c590b314fa6e4643031bc5dc3d1e4991a7b71f

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 202a9bacf9da4f8b4323f7cb249f7d5a86143bbbc1325f89241106c9742aaa22
MD5 6201d3d504325dc90e3c104b15dc096d
BLAKE2b-256 4f952f196ccc591ac7e705b9274a414b4ad7e629d862d1d32a95938203db2f11

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4f1fe5e5d74bd31c69b601dd87bb0fd9a66e5e556e035b02b6b1d472e24b0769
MD5 5ff15fd1eb5dd2b0b0657ce69157d293
BLAKE2b-256 cf60ece50f1dd7d65362619e766b48014d126761ccaba0fc013118b4eda7a0b7

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a90f1dfa26961d2543d10b3274f806ee82a1b22abff22064efe51d72496cad05
MD5 256d51f2bf67c10991178d5dea1a0967
BLAKE2b-256 6cc3bc294a4301087659931330206cd4194dcb7caff278438d7b5b00e7c6717b

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 aa8b91c835c39f00d47e1549b4dfae82ff055bba70a12740fe922f9e0c6c874e
MD5 d5c22c88d4f682ec328a1ae7d042b52f
BLAKE2b-256 4593175c753987baf494de45da3b91c59d6c497e56ccb77168df1067f6b356ac

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp38-none-win_amd64.whl.

File metadata

  • Download URL: bytewax-0.19.1-cp38-none-win_amd64.whl
  • Upload date:
  • Size: 5.3 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.19

File hashes

Hashes for bytewax-0.19.1-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 7bc518529f43f674a19e2f1eb4b936207ebea8710cadd45402dc8c81f4ba92dc
MD5 1d9d6dcc4329897c0a18bfbab8cb85d5
BLAKE2b-256 3b6c50ebdc8087e0a1626456853d4a1e063074fd45e60beaa98714dfd203caec

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp38-cp38-manylinux_2_31_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp38-cp38-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 74371c66c7b90631b050775de973a7a99cf938871f0bcb1abf0815b03d189834
MD5 13ec5fb4ff496a3dbf43ee663b4dc6e0
BLAKE2b-256 8658216ea4fcd275516d0db5680a21719e81f45affc51b86ad5e8fac025d2c76

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 2e4718066f6ce646eb732304000fac9b0c0ba96fef9d6210a0c2a141cbc090d6
MD5 56f92ca6860e43ba903607da53c8f7f6
BLAKE2b-256 75c5733de13b86ac28bc3c45d74dfab4f75d6896743a7dddb4b4cf5e03c974ec

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 6f5da60bdbe4617e77ecc78381d1ba1b4aea6389878f4f89c5d3232929d1b8b3
MD5 7db5b93a714f6c613687a7f5f8656f46
BLAKE2b-256 dc9800a026e4dae21dec9378909fb3c15a04a70cddb0173912367a4b54e37495

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d98463e4f67ab4557ff580b78ead719114fc788e969c9e4c43fa230ed3a959c2
MD5 b64b1033cdc21bda0f8feed959c6cf60
BLAKE2b-256 1f08c07f5e7a6e18b77298813d4701c58fc0fb7f4f99510b47e9ac8951d9c1e9

See more details on using hashes here.

File details

Details for the file bytewax-0.19.1-cp38-cp38-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for bytewax-0.19.1-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 76b1ef316bde07291d9b5beeed8dff91959f092254a8e0c7b3260fcdeb95210d
MD5 1f984b2e8512729332061aa7ec41ab49
BLAKE2b-256 cfba1d310150b0c9d9d6b588fd2dabd175e2824d27de058eb3f42e9c4008385d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page