# Sail
[](https://github.com/lakehq/sail/actions)
[](https://app.codecov.io/gh/lakehq/sail)
[](https://pypi.org/project/pysail/)
[](https://pypi.org/project/pysail/)
[](https://www.launchpass.com/lakesail-community/free)
The mission of Sail is to unify stream processing, batch processing, and compute-intensive (AI) workloads.
Currently, Sail features a drop-in replacement for Spark SQL and the Spark DataFrame API in both single-host and distributed settings.
**✨Using Sail? [Tell us your story](https://lakesail.com/share-story/) and get free merch!✨**
## Installation
Sail is available as a Python package on PyPI. You can install it along with PySpark in your Python environment.
```bash
pip install pysail
pip install "pyspark[connect]"
```
Alternatively, you can install the lightweight client package `pyspark-client` since Spark 4.0.
The `pyspark-connect` package, which is equivalent to `pyspark[connect]`, is also available since Spark 4.0.
The [Installation](https://docs.lakesail.com/sail/latest/introduction/installation/) guide contains more information about installing Sail from source for better performance for your hardware architecture.
## Getting Started
### Starting the Sail Server
**Option 1: Command Line Interface** You can start the local Sail server using the `sail` command.
```bash
sail spark server --port 50051
```
**Option 2: Python API** You can start the local Sail server using the Python API.
```python
from pysail.spark import SparkConnectServer
server = SparkConnectServer(port=50051)
server.start(background=False)
```
**Option 3: Kubernetes** You can deploy Sail on Kubernetes and run Sail in cluster mode for distributed processing.
Please refer to the [Kubernetes Deployment Guide](https://docs.lakesail.com/sail/latest/guide/deployment/kubernetes.html) for instructions on building the Docker image and writing the Kubernetes manifest YAML file.
```bash
kubectl apply -f sail.yaml
kubectl -n sail port-forward service/sail-spark-server 50051:50051
```
### Connecting to the Sail Server
Once you have a running Sail server, you can connect to it in PySpark.
No changes are needed in your PySpark code!
```python
from pyspark.sql import SparkSession
spark = SparkSession.builder.remote("sc://localhost:50051").getOrCreate()
spark.sql("SELECT 1 + 1").show()
```
Please refer to the [Getting Started](https://docs.lakesail.com/sail/latest/introduction/getting-started/) guide for further details.
## Documentation
The documentation of the latest Sail version can be found [here](https://docs.lakesail.com/sail/latest/).
## Further Reading
- [Supercharge Spark: Quadruple Speed, Cut Costs by 94%](https://lakesail.com/blog/supercharge-spark/) - This post presents detailed **benchmark results** comparing Sail with Spark.
- [Sail 0.2 and the Future of Distributed Processing](https://lakesail.com/blog/the-future-of-distributed-processing/) - This post discusses the Sail **distributed processing architecture**.
## Contributing
Contributions are more than welcome!
Please submit [GitHub issues](https://github.com/lakehq/sail/issues) for bug reports and feature requests.
You are also welcome to ask questions in [GitHub discussions](https://github.com/lakehq/sail/discussions).
Feel free to create a [pull request](https://github.com/lakehq/sail/pulls) if you would like to make a code change.
You can refer to the [development guide](https://docs.lakesail.com/sail/main/development/) to get started.
## Support
LakeSail offers flexible enterprise support options for Sail. Please [contact us](https://lakesail.com/support/) to learn more.
Raw data
{
"_id": null,
"home_page": null,
"name": "pysail",
"maintainer": null,
"docs_url": null,
"requires_python": "<3.14,>=3.9",
"maintainer_email": null,
"keywords": "data, big data, sql, spark, pyspark, arrow, datafusion",
"author": null,
"author_email": "LakeSail <hello@lakesail.com>",
"download_url": "https://files.pythonhosted.org/packages/4c/cd/979eafd76101688b3ca8b80935e6a5b06e62c0a984a17709226742b388b5/pysail-0.3.5.tar.gz",
"platform": null,
"description": "# Sail\n\n[](https://github.com/lakehq/sail/actions)\n[](https://app.codecov.io/gh/lakehq/sail)\n[](https://pypi.org/project/pysail/)\n[](https://pypi.org/project/pysail/)\n[](https://www.launchpass.com/lakesail-community/free)\n\nThe mission of Sail is to unify stream processing, batch processing, and compute-intensive (AI) workloads.\nCurrently, Sail features a drop-in replacement for Spark SQL and the Spark DataFrame API in both single-host and distributed settings.\n\n**\u2728Using Sail? [Tell us your story](https://lakesail.com/share-story/) and get free merch!\u2728**\n\n## Installation\n\nSail is available as a Python package on PyPI. You can install it along with PySpark in your Python environment.\n\n```bash\npip install pysail\npip install \"pyspark[connect]\"\n```\n\nAlternatively, you can install the lightweight client package `pyspark-client` since Spark 4.0.\nThe `pyspark-connect` package, which is equivalent to `pyspark[connect]`, is also available since Spark 4.0.\n\nThe [Installation](https://docs.lakesail.com/sail/latest/introduction/installation/) guide contains more information about installing Sail from source for better performance for your hardware architecture.\n\n## Getting Started\n\n### Starting the Sail Server\n\n**Option 1: Command Line Interface** You can start the local Sail server using the `sail` command.\n\n```bash\nsail spark server --port 50051\n```\n\n**Option 2: Python API** You can start the local Sail server using the Python API.\n\n```python\nfrom pysail.spark import SparkConnectServer\n\nserver = SparkConnectServer(port=50051)\nserver.start(background=False)\n```\n\n**Option 3: Kubernetes** You can deploy Sail on Kubernetes and run Sail in cluster mode for distributed processing.\nPlease refer to the [Kubernetes Deployment Guide](https://docs.lakesail.com/sail/latest/guide/deployment/kubernetes.html) for instructions on building the Docker image and writing the Kubernetes manifest YAML file.\n\n```bash\nkubectl apply -f sail.yaml\nkubectl -n sail port-forward service/sail-spark-server 50051:50051\n```\n\n### Connecting to the Sail Server\n\nOnce you have a running Sail server, you can connect to it in PySpark.\nNo changes are needed in your PySpark code!\n\n```python\nfrom pyspark.sql import SparkSession\n\nspark = SparkSession.builder.remote(\"sc://localhost:50051\").getOrCreate()\nspark.sql(\"SELECT 1 + 1\").show()\n```\n\nPlease refer to the [Getting Started](https://docs.lakesail.com/sail/latest/introduction/getting-started/) guide for further details.\n\n## Documentation\n\nThe documentation of the latest Sail version can be found [here](https://docs.lakesail.com/sail/latest/).\n\n## Further Reading\n\n- [Supercharge Spark: Quadruple Speed, Cut Costs by 94%](https://lakesail.com/blog/supercharge-spark/) - This post presents detailed **benchmark results** comparing Sail with Spark.\n- [Sail 0.2 and the Future of Distributed Processing](https://lakesail.com/blog/the-future-of-distributed-processing/) - This post discusses the Sail **distributed processing architecture**.\n\n## Contributing\n\nContributions are more than welcome!\n\nPlease submit [GitHub issues](https://github.com/lakehq/sail/issues) for bug reports and feature requests.\nYou are also welcome to ask questions in [GitHub discussions](https://github.com/lakehq/sail/discussions).\n\nFeel free to create a [pull request](https://github.com/lakehq/sail/pulls) if you would like to make a code change.\nYou can refer to the [development guide](https://docs.lakesail.com/sail/main/development/) to get started.\n\n## Support\n\nLakeSail offers flexible enterprise support options for Sail. Please [contact us](https://lakesail.com/support/) to learn more.\n\n",
"bugtrack_url": null,
"license": null,
"summary": "Sail Python library",
"version": "0.3.5",
"project_urls": {
"Documentation": "https://docs.lakesail.com/sail/latest/",
"Homepage": "https://lakesail.com",
"Issues": "https://github.com/lakehq/sail/issues",
"Repository": "https://github.com/lakehq/sail"
},
"split_keywords": [
"data",
" big data",
" sql",
" spark",
" pyspark",
" arrow",
" datafusion"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "e9dd3f13644d749d8537e0dbc8cdc5938b9be5616f3d7b62324c6861ace26d3c",
"md5": "1b828d62519131c28044672bbb4a4e6f",
"sha256": "a1d13c4ca254ef7f714d55646a17b3461f784155e60cc7bb16529f660ac19098"
},
"downloads": -1,
"filename": "pysail-0.3.5-cp38-abi3-macosx_10_12_x86_64.whl",
"has_sig": false,
"md5_digest": "1b828d62519131c28044672bbb4a4e6f",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<3.14,>=3.9",
"size": 37816048,
"upload_time": "2025-09-05T12:33:02",
"upload_time_iso_8601": "2025-09-05T12:33:02.105703Z",
"url": "https://files.pythonhosted.org/packages/e9/dd/3f13644d749d8537e0dbc8cdc5938b9be5616f3d7b62324c6861ace26d3c/pysail-0.3.5-cp38-abi3-macosx_10_12_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "0adb5c0108e92579a75fe61bae027d89db2143d8a3d27efbe895a829d367a4ca",
"md5": "e4ddeae1e4ee9f8ce7c668197eaf672a",
"sha256": "7ffe0d4a8af9ed668eb0f3b3e495c2d251c68d9ac08d5d0524fc26120d7c6d07"
},
"downloads": -1,
"filename": "pysail-0.3.5-cp38-abi3-macosx_11_0_arm64.whl",
"has_sig": false,
"md5_digest": "e4ddeae1e4ee9f8ce7c668197eaf672a",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<3.14,>=3.9",
"size": 34205653,
"upload_time": "2025-09-05T12:33:04",
"upload_time_iso_8601": "2025-09-05T12:33:04.889496Z",
"url": "https://files.pythonhosted.org/packages/0a/db/5c0108e92579a75fe61bae027d89db2143d8a3d27efbe895a829d367a4ca/pysail-0.3.5-cp38-abi3-macosx_11_0_arm64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "f348dd6d5c0214895abd547ee6d1251260de20d5bc43c925e7464474939e3a96",
"md5": "8bf935af1a5bdba03ee788d8d75503aa",
"sha256": "41079a6492b57d918f367e1cdef27c71731bdd4b8205928cc4590fd6cdeda34e"
},
"downloads": -1,
"filename": "pysail-0.3.5-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "8bf935af1a5bdba03ee788d8d75503aa",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<3.14,>=3.9",
"size": 41017983,
"upload_time": "2025-09-05T12:33:08",
"upload_time_iso_8601": "2025-09-05T12:33:08.087723Z",
"url": "https://files.pythonhosted.org/packages/f3/48/dd6d5c0214895abd547ee6d1251260de20d5bc43c925e7464474939e3a96/pysail-0.3.5-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a00e27f791118d955e3bf1e5643abaed3375221beffa0bd24e1653747aa2a03b",
"md5": "e69ac986a789e2e39c78c01d984b387f",
"sha256": "c19df3c766e3254f04b2de9c9a6d1607d5ddb88a6be1962a52891c33b73be7e4"
},
"downloads": -1,
"filename": "pysail-0.3.5-cp38-abi3-manylinux_2_24_aarch64.whl",
"has_sig": false,
"md5_digest": "e69ac986a789e2e39c78c01d984b387f",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<3.14,>=3.9",
"size": 36883880,
"upload_time": "2025-09-05T12:33:10",
"upload_time_iso_8601": "2025-09-05T12:33:10.789022Z",
"url": "https://files.pythonhosted.org/packages/a0/0e/27f791118d955e3bf1e5643abaed3375221beffa0bd24e1653747aa2a03b/pysail-0.3.5-cp38-abi3-manylinux_2_24_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "1fc0abc65a1ca02ce3aa471ff8e116c02c1406f6cf4376dd53a0dd7308127669",
"md5": "563456c80dd5d848ed999eaeadbab85d",
"sha256": "aaf019904f43994882fad163917f0e91bcf29a4e78f243da507166ee443ddb05"
},
"downloads": -1,
"filename": "pysail-0.3.5-cp38-abi3-win_amd64.whl",
"has_sig": false,
"md5_digest": "563456c80dd5d848ed999eaeadbab85d",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": "<3.14,>=3.9",
"size": 41046622,
"upload_time": "2025-09-05T12:33:13",
"upload_time_iso_8601": "2025-09-05T12:33:13.965511Z",
"url": "https://files.pythonhosted.org/packages/1f/c0/abc65a1ca02ce3aa471ff8e116c02c1406f6cf4376dd53a0dd7308127669/pysail-0.3.5-cp38-abi3-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "4ccd979eafd76101688b3ca8b80935e6a5b06e62c0a984a17709226742b388b5",
"md5": "dec028f39d0509a2fc5db922aa25ab00",
"sha256": "8f3205b7e17658412755523f92b59c9c21db34b4aee9941549f673d107145d5b"
},
"downloads": -1,
"filename": "pysail-0.3.5.tar.gz",
"has_sig": false,
"md5_digest": "dec028f39d0509a2fc5db922aa25ab00",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<3.14,>=3.9",
"size": 933483,
"upload_time": "2025-09-05T12:33:16",
"upload_time_iso_8601": "2025-09-05T12:33:16.638912Z",
"url": "https://files.pythonhosted.org/packages/4c/cd/979eafd76101688b3ca8b80935e6a5b06e62c0a984a17709226742b388b5/pysail-0.3.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-05 12:33:16",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "lakehq",
"github_project": "sail",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "pysail"
}