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.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

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

bytewax-0.21.1-cp312-none-win_amd64.whl (5.2 MB view details)

Uploaded CPython 3.12Windows x86-64

bytewax-0.21.1-cp312-cp312-manylinux_2_31_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.31+ x86-64

bytewax-0.21.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (7.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARMv7l

bytewax-0.21.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

bytewax-0.21.1-cp312-cp312-macosx_11_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

bytewax-0.21.1-cp312-cp312-macosx_10_12_x86_64.whl (6.1 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

bytewax-0.21.1-cp311-none-win_amd64.whl (5.2 MB view details)

Uploaded CPython 3.11Windows x86-64

bytewax-0.21.1-cp311-cp311-manylinux_2_31_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.31+ x86-64

bytewax-0.21.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (7.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARMv7l

bytewax-0.21.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.0 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

bytewax-0.21.1-cp311-cp311-macosx_11_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

bytewax-0.21.1-cp311-cp311-macosx_10_12_x86_64.whl (6.1 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

bytewax-0.21.1-cp310-none-win_amd64.whl (5.2 MB view details)

Uploaded CPython 3.10Windows x86-64

bytewax-0.21.1-cp310-cp310-manylinux_2_31_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.31+ x86-64

bytewax-0.21.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (7.7 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARMv7l

bytewax-0.21.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.0 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

bytewax-0.21.1-cp310-cp310-macosx_11_0_arm64.whl (6.0 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

bytewax-0.21.1-cp310-cp310-macosx_10_12_x86_64.whl (6.1 MB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

bytewax-0.21.1-cp39-none-win_amd64.whl (5.2 MB view details)

Uploaded CPython 3.9Windows x86-64

bytewax-0.21.1-cp39-cp39-manylinux_2_31_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.31+ x86-64

bytewax-0.21.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (7.7 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARMv7l

bytewax-0.21.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.0 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

bytewax-0.21.1-cp39-cp39-macosx_11_0_arm64.whl (6.1 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

bytewax-0.21.1-cp39-cp39-macosx_10_12_x86_64.whl (6.1 MB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

bytewax-0.21.1-cp38-none-win_amd64.whl (5.2 MB view details)

Uploaded CPython 3.8Windows x86-64

bytewax-0.21.1-cp38-cp38-manylinux_2_31_x86_64.whl (8.0 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.31+ x86-64

bytewax-0.21.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl (7.7 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARMv7l

bytewax-0.21.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (8.0 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

bytewax-0.21.1-cp38-cp38-macosx_11_0_arm64.whl (6.1 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

bytewax-0.21.1-cp38-cp38-macosx_10_12_x86_64.whl (6.1 MB view details)

Uploaded CPython 3.8macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: bytewax-0.21.1-cp312-none-win_amd64.whl
  • Upload date:
  • Size: 5.2 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for bytewax-0.21.1-cp312-none-win_amd64.whl
Algorithm Hash digest
SHA256 9b3c44984fe76da1fbac941392103610f884523a733a43fcd74543927c179854
MD5 3c841d3aba5fd82cdcfd40351af0cdc7
BLAKE2b-256 debc82686047e63fa709dc084399230c430c4fd2f2f2de3cf8be8d339ebd3f21

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp312-cp312-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 a118a61a5fc5a1849605e062f80e897922dbdadd37790cf8379e8f1e000d463c
MD5 7a7022c12c8a4583cebc70e84c27fac8
BLAKE2b-256 1f6647d1dbdd2a035074b2be3eac983d15742cc2749fee24aa3cc0c505277622

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 ba078e8bc7c6f1e7d7c99c4c07433977717b949112fc53377a0b0f3289398072
MD5 397b358ced6438907f1d78d2df1e4bef
BLAKE2b-256 87f257829eea0d188bd1d54e2555a11ecfd3589ec66d710c8163fb7010a0c82e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ed8da9bfceb3299df8cf4e8e7efbbda924dbbfea990dff50c8602a059dc8b9cf
MD5 233d71a329cfac2356baa04a41583aff
BLAKE2b-256 201c41b84d0de3949d75dd52b4b04341bed1c72250c4c1e017b527d7f7570f0b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e3ab20069f323ffe508249d72c8c708cac05fddea11b74943103c623676785b6
MD5 8a82a19ea7d71ee0632c5eed74b78e5e
BLAKE2b-256 38ef4dd07083f32f9b019101837a10dc97806fbe3455c70f8cd976eb987dedab

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 62f5edef91908e555b70f3794271cd29ff29132a63b0b5cd367c5f53695a3c14
MD5 3addbd961af713e54742617d4fdfd19d
BLAKE2b-256 41ebee253e60ab676e2a70aa306cffee67d6a6a40993c8467d3b83ea8bb91e99

See more details on using hashes here.

File details

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

File metadata

  • Download URL: bytewax-0.21.1-cp311-none-win_amd64.whl
  • Upload date:
  • Size: 5.2 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for bytewax-0.21.1-cp311-none-win_amd64.whl
Algorithm Hash digest
SHA256 7ede7d3b1626fb65a584a0d8944244da329a64a6f974ab386b12243dc934b52d
MD5 facce10c9903f97286436b9b36019027
BLAKE2b-256 90a9e06af46d9d0122c235abd9604e1fd286adf464450f18d726e9b36cba7e94

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp311-cp311-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 877f63068c963b62d2171302d1fc1b7aa221c40087c7b2478e4ba4e50e26eb1e
MD5 6342d3a6dc1cf9bb3d24d4d23a0c130f
BLAKE2b-256 b2dd6c2d93f9c699f36462e37611b9e370d099953b6ab9f7171bd504db0c3567

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 9495b4a677f6675a70790c66176646a4994ca5af82624703292e54b0e45d5682
MD5 87de1c924b9578233067feb267983d20
BLAKE2b-256 31e57f7775dd2a2f64e454a215cfab3bd5955241a261dd4c1f055c7cf6497f49

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 e809e15308262679c3366b262a56675f699bd53cc0ff41b0e124768c59232e94
MD5 fb2e4e28f5d3782ffaf785feaa65f37e
BLAKE2b-256 b5aa00658c797fcc28a1bba208b8bf92fc6892059b75ece180894a4cd17ed4b3

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 87f01bd8e92a873e84fb98959bd53c0ef955fcd9f8b9d0f6c0945014bc7f59d0
MD5 f3abf2f630885668bdb7a4065ae6846e
BLAKE2b-256 2fcf3d2e7a19dda70a0399f690b87419ce57d5f04d0693941f157edc4feb9cef

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c53a7fd5b2c4dc30f7574c85f9e7dd017c2365c05f714cf5215871dea190199c
MD5 72e0c19ae13fbe04885f119ff9a3ee42
BLAKE2b-256 147aa102ec999fb53634589e186b03fc25904ed64d632840714f8085ba2a007f

See more details on using hashes here.

File details

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

File metadata

  • Download URL: bytewax-0.21.1-cp310-none-win_amd64.whl
  • Upload date:
  • Size: 5.2 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for bytewax-0.21.1-cp310-none-win_amd64.whl
Algorithm Hash digest
SHA256 0f493c652e56818adfc08c8810bc8b7f82e3ccef27657592174ec3ebcb573a2b
MD5 203dc18b96645aea01d02cd8a3ff2baa
BLAKE2b-256 30ee5f5cd1b70e4075ac47748af90e5a1f0d762c57967275a85ed9b1474f8d45

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp310-cp310-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 eb68cd383055e1bdd4a59f8d0af23b4ad7b4cac44bcbabe6a7ebf15e91d45e7c
MD5 9cc463816c638ff9586c415426b461f2
BLAKE2b-256 07b9f23b63ae0de435fde75a887039f190f2375be957d472411d54cfebda36cf

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 58256f469523107d3b279437fc4e4780ab1b15e93abd05e3370f7aa2e620edf9
MD5 a57adc6134aee26501a2599bc4a4647f
BLAKE2b-256 df7e5a33059f9514a06e918978802ebc9b402fc00496882ef122913847c6c468

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 565872264935a7b780f3b5424a1623d1dfdbfa1d7c817fb2b487e167db03fd61
MD5 4ef19a24bb596477cf3355094104a47d
BLAKE2b-256 85a56f480c2c2ce059bbec4fb461361006f2fe2e34e018b763d2d7d1372e6b09

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ad1196efe8809173a094e5e0bd8487bb903bca121c2b84b118a7c10b0007ee77
MD5 6e2c1246c90848911a39b1ecd6186f41
BLAKE2b-256 6c705582e6d81e0c1254257136d28be29f4395edf900cb44f76b58d8050b78c6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 162e7f39adadbb8d53490bc7eee8dc8a7a815b58dba2b6a4e2d5c0d0c7bb5550
MD5 15e2669d4251505905fc0786b4a93dfa
BLAKE2b-256 9aaf01da47f0ebb65bf31d964181898106e800aea58d5d32dd91942ee05a2d75

See more details on using hashes here.

File details

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

File metadata

  • Download URL: bytewax-0.21.1-cp39-none-win_amd64.whl
  • Upload date:
  • Size: 5.2 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for bytewax-0.21.1-cp39-none-win_amd64.whl
Algorithm Hash digest
SHA256 324b2995ad964b1dd8f9f0a87fcce0a8e5d8fb17ee6bd6db7e1501ecb7abc358
MD5 fe067564ce9665ad5f9a2bd7bd14a541
BLAKE2b-256 942612df442037157d0319092c833a9161623ea267f443603009d835f9a9139a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp39-cp39-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 8b53f5fc3a1fd76be5659c71fd079a835747fd3b230ab9f06b9ecca86f2e13c3
MD5 2383552d4a263623395ec4953377a05f
BLAKE2b-256 3030c84addd87cdafb1874399ac3b5cd3972067c75099ab93c04727b900f11c2

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 fe4fd34b59f899fa8dca1c9c7408c34188b6adcbe346c9f2b669106e086c2820
MD5 bff173bfdaac5872d76ec9114c27296b
BLAKE2b-256 896cf89f0088dbf083e6f3e685de735e887996dd57e55d65da329461e866bc06

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0a4f615d94b4dc6a3ed4afb2d23818abc500648f4245ac2ab39d4872e77ae5d5
MD5 aa160ffb82f523b74d47b42d22c1a63f
BLAKE2b-256 c1c6f0f45fee7039e8da37e020de00545644013b067d5ea86b09ab3cdcd5f6f4

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9723c597845aef7dc319f960ca11a5d40705c49d6700a82a75224051b03f7263
MD5 160a16eb02b859453dd40fd6d302113d
BLAKE2b-256 c1898ebf0eb8c85b50a8728ae391745523ffc7af1645a02aed55c26804e81307

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 5a1848100ac81addc20ed71669097eed6fa66fe52c994dbd02063f60f622494b
MD5 0ee5f57ccc8adb8ea809ab730440d30f
BLAKE2b-256 d2d740eb9cd20766a4324faf8f58a7cabb3ca5d115d162344cf7014b7258b71c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: bytewax-0.21.1-cp38-none-win_amd64.whl
  • Upload date:
  • Size: 5.2 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.9.20

File hashes

Hashes for bytewax-0.21.1-cp38-none-win_amd64.whl
Algorithm Hash digest
SHA256 f4d866c7cb6dd8faacc8e9120e073491188f642ac8100f637a6830f3b83cd8e9
MD5 e082189815b0f6b893066cd6f07bd9cd
BLAKE2b-256 adc5f3b4932c791c351079a154de905f0c43153100ed6b23cb7bc63f10fe57ee

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp38-cp38-manylinux_2_31_x86_64.whl
Algorithm Hash digest
SHA256 9632601c3a5d6f94dfae978d3132b24a40354e073197e6dfae96055ff08a0588
MD5 ff2345fab9cc4b73af8eebe9e746d767
BLAKE2b-256 9778453ca607ed160788ac829b29b348963f1a5cd682996d4a2cb7d80922feb9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl
Algorithm Hash digest
SHA256 e68c1d7b6600442c4b79d1768f6f7a870b0faf0fa5f4d1dc48fda27855ce93b6
MD5 46c9fd7451ba0de0bd0ef2bf8728aa49
BLAKE2b-256 bcf956645a43932aa6b1ab286536f8d1d5b08e9f4b776da89d0b0dcb02fa49cc

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1781d296add64a7b44812ab3cc22eba8174b9ea8a1e231b9c12e98e363033965
MD5 1a60b74c74d233f4d5c2667e3fa9910f
BLAKE2b-256 ebf81571571050fe731ec992b764e980b39a21a3515a12c1cbc8f20a21fa5a9e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1eae19be85155358cd7d50d5dbb54c644a263fe80a2aa883f9db7f6cb5d15ba3
MD5 6eb56b96019b4d3a7f318488f8373b60
BLAKE2b-256 f730cd10a200cc31681d53bb14bcc750eb525cebfdfd15f3d23e7e0527db5507

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bytewax-0.21.1-cp38-cp38-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4bc9ba686a52fb3a76b9e0330bc58f35719b514b4ee7cf04792b45e718e9339c
MD5 bb38bd22ac9e441b30cc7717d45ffdee
BLAKE2b-256 386194cc5f8d280264801cbceff8b0200d90c5ed94661b853b514f88d6cb24c2

See more details on using hashes here.

Supported by

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