Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

congruity

GitHub Actions Build PyPI Downloads

In many ways, the migration from using classic Spark applications using the full power and flexibility to be using only the Spark Connect compatible DataFrame API can be challenging.

The goal of this library is to provide a compatibility layer that makes it easier to adopt Spark Connect. The library is designed to be simply imported in your application and will then monkey-patch the existing API to provide the legacy functionality.

Non-Goals

This library is not intended to be a long-term solution. The goal is to provide a compatibility layer that becomes obsolete over time. In addition, we do not aim to provide compatibility for all methods and features but only a select subset. Lastly, we do not aim to achieve the same performance as using some of the native RDD APIs.

Usage

Spark JVM & Spark Connect compatibility library.

pip install spark-congruity
import congruity

Example

Here is code that works on Spark JVM:

from pyspark.sql import SparkSession

spark = SparkSession.builder.remote("sc://localhost").getOrCreate()
data = [("Java", "20000"), ("Python", "100000"), ("Scala", "3000")]
spark.sparkContext.parallelize(data).toDF()

This code doesn't work with Spark Connect. The congruity library rearranges the code under the hood, so the old syntax works on Spark Connect clusters as well:

import congruity  # noqa: F401
from pyspark.sql import SparkSession

spark = SparkSession.builder.remote("sc://localhost").getOrCreate()
data = [("Java", "20000"), ("Python", "100000"), ("Scala", "3000")]
spark.sparkContext.parallelize(data).toDF()

Contributing

We very much welcome contributions to this project. The easiest way to start is to pick any of the below RDD or SparkContext methods and implement the compatibility layer. Once you have done that open a pull request and we will review it.

What's supported?

RDD

RDD API Comment
aggregate ✅
aggregateByKey ❌
barrier ❌
cache ❌
cartesian ❌
checkpoint ❌
cleanShuffleDependencies ❌
coalesce ❌
cogroup ❌
collect ✅
collectAsMap ❌
collectWithJobGroup ❌
combineByKey ❌
count ✅
countApprox ❌
countByKey ❌
countByValue ❌
distinct ❌
filter ✅
first ✅
flatMap ❌
fold ✅ First version
foreach ❌
foreachPartition ❌
fullOuterJoin ❌
getCheckpointFile ❌
getNumPartitions ❌
getResourceProfile ❌
getStorageLevel ❌
glom ✅
groupBy ✅
groupByKey ✅
groupWith ❌
histogram ✅
id ❌
intersection ❌
isCheckpointed ❌
isEmpty ❌
isLocallyCheckpointed ❌
join ❌
keyBy ✅
keys ✅
leftOuterJoin ❌
localCheckpoint ❌
lookup ❌
map ✅
mapPartitions ✅ First version, based on mapInArrow.
mapPartitionsWithIndex ❌
mapPartitionsWithSplit ❌
mapValues ✅
max ✅
mean ✅
meanApprox ❌
min ✅
name ❌
partitionBy ❌
persist ❌
pipe ❌
randomSplit ❌
reduce ✅
reduceByKey ❌
repartition ❌
repartitionAndSortWithinPartition ❌
rightOuterJoin ❌
sample ❌
sampleByKey ❌
sampleStdev ✅
sampleVariance ✅
saveAsHadoopDataset ❌
saveAsHadoopFile ❌
saveAsNewAPIHadoopDataset ❌
saveAsNewAPIHadoopFile ❌
saveAsPickleFile ❌
saveAsTextFile ❌
setName ❌
sortBy ❌
sortByKey ❌
stats ✅
stdev ✅
subtract ❌
substractByKey ❌
sum ✅ First version.
sumApprox ❌
take ✅ Ordering might not be guaranteed in the same way as it is in RDD.
takeOrdered ❌
takeSample ❌
toDF ✅
toDebugString ❌
toLocalIterator ❌
top ❌
treeAggregate ❌
treeReduce ❌
union ❌
unpersist ❌
values ✅
variance ✅
withResources ❌
zip ❌
zipWithIndex ❌
zipWithUniqueId ❌

SparkContext

RDD API Comment
parallelize ✅ Does not support numSlices yet.

Limitations

  • Error handling and checking is kind of limited right now. We try to emulate the existing behavior, but this is not always possible because the invariants are not encode in Python but rather somewhere in Scala.
  • numSlices - we don't emulate this behavior for now.

Release files for spark-congruity 0.0.1rc5

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

Source distribution (sdist)

Source distribution for spark-congruity 0.0.1rc5
File Size Uploaded
spark_congruity-0.0.1rc5.tar.gz 15.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for spark-congruity 0.0.1rc5
File Interpreter ABI Platform
spark_congruity-0.0.1rc5-py3-none-any.whl Python 3 none any Details

Total release size: 35.1 kB

Release files / spark_congruity-0.0.1rc5.tar.gz

Download URL spark_congruity-0.0.1rc5.tar.gz
Size 15.6 kB
Tags Source
SHA-256 checksum
How to use checksums
aaf06969e68c6248932e5045b79ca8b9aa185a825e89cf0a0d682527e432f381
BLAKE2b-256 checksum
How to use checksums
7ebc00db37e6c25b4b9f75cb76826ef0fe4871578f448bd02f20312148e895a5
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3

Release files / spark_congruity-0.0.1rc5-py3-none-any.whl

Download URL spark_congruity-0.0.1rc5-py3-none-any.whl
Size 19.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e38107b1e561e0509315f0b7c2511b52689e9ef607d8cbbed7edca492b50b6ab
BLAKE2b-256 checksum
How to use checksums
1857c323b4f819e99550038d8164414de186ff694fee9c535ed80c637488f2a3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/5.0.0 CPython/3.12.3
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