GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - typelevel/frameless: Expressive types for Spark.

BranchesTags
Open more actions menu

Latest commit

 

History

1,160 Commits
1,160 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
cats/src
cats/src
 
 
core/src/main/scala/frameless
core/src/main/scala/frameless
 
 
dataset/src
dataset/src
 
 
docs
docs
 
 
ml/src
ml/src
 
 
project
project
 
 
refined/src
refined/src
 
 
scripts
scripts
 
 
.git-blame-ignore-revs
.git-blame-ignore-revs
 
 
.gitignore
.gitignore
 
 
.scalafmt.conf
.scalafmt.conf
 
 
LICENSE
LICENSE
 
 
README.md
README.md
 
 
build.sbt
build.sbt
 
 
github.sbt
github.sbt
 
 

Repository files navigation

Frameless

Workflow Badge Codecov Badge Discord Badge Maven Badge Snapshots Badge

Frameless is a Scala library for working with Spark using more expressive types. It consists of the following modules:

  • frameless-dataset for a more strongly typed Dataset/DataFrame API
  • frameless-ml for a more strongly typed Spark ML API based on frameless-dataset
  • frameless-cats for using Spark's RDD API with cats

Note that while Frameless is still getting off the ground, it is very possible that breaking changes will be made for at least the next few versions.

The Frameless project and contributors support the Typelevel Code of Conduct and want all its associated channels (e.g. GitHub, Discord) to be a safe and friendly environment for contributing and learning.

Versions and dependencies

The compatible versions of Spark and cats are as follows:

Frameless Spark Cats Cats-Effect Scala
0.17.0 4.2.0† / 4.1.3† / 4.0.4† / 3.5.8 / 3.4.4 2.x 3.x 2.12 / 2.13
0.16.0 3.5.0 / 3.4.0 / 3.3.0 2.x 3.x 2.12 / 2.13
0.15.0 3.4.0 / 3.3.0 / 3.2.2 2.x 3.x 2.12 / 2.13
0.14.1 3.4.0 / 3.3.0 / 3.2.2 2.x 3.x 2.12 / 2.13
0.14.0 3.3.0 / 3.2.2 / 3.1.3 2.x 3.x 2.12 / 2.13
0.13.0 3.3.0 / 3.2.2 / 3.1.3 2.x 3.x 2.12 / 2.13
0.12.0 3.2.1 / 3.1.3 / 3.0.3 2.x 3.x 2.12 / 2.13
0.11.1 3.2.0 / 3.1.2 / 3.0.1 2.x 2.x 2.12 / 2.13
0.11.0* 3.2.0 / 3.1.2 / 3.0.1 2.x 2.x 2.12 / 2.13
0.10.1 3.1.0 2.x 2.x 2.12
0.9.0 3.0.0 1.x 1.x 2.12
0.8.0 2.4.0 1.x 1.x 2.11 / 2.12
0.7.0 2.3.1 1.x 1.x 2.11
0.6.1 2.3.0 1.x 0.8 2.11
0.5.2 2.2.1 1.x 0.8 2.11
0.4.1 2.2.0 1.x 0.8 2.11
0.4.0 2.2.0 1.0.0-IF 0.4 2.11

* 0.11.0 has broken Spark 3.1.2 and 3.0.1 artifacts published.

† The Spark 4.0.x artifacts (-spark40) are published for Scala 2.13 only and require JDK 17+, since Spark 4 dropped Scala 2.12 and JDK 8/11. The default (unsuffixed) artifacts still target Spark 3.5. † The Spark 4.1.x artifacts (-spark41) are published for Scala 2.13 only and require JDK 17+, since Spark 4 dropped Scala 2.12 and JDK 8/11. The default (unsuffixed) artifacts still target Spark 3.5. † The Spark 4.2.x artifacts (-spark42) are published for Scala 2.13 only and require JDK 17+, since Spark 4 dropped Scala 2.12 and JDK 8/11. The default (unsuffixed) artifacts still target Spark 3.5.

Starting 0.11 we introduced Spark cross published artifacts:

  • By default, frameless artifacts depend on the most recent Spark version
  • Suffix -spark{major}{minor} is added to artifacts that are released for the previous Spark version(s)

Artifact names examples:

  • frameless-dataset (the default Spark 3.5.x dependency)
  • frameless-dataset-spark40 (Spark 4.0.x dependency; Scala 2.13 + JDK 17 only)
  • frameless-dataset-spark34 (Spark 3.4.x dependency)

Versions 0.5.x and 0.6.x have identical features. The first is compatible with Spark 2.2.1 and the second with 2.3.0.

The only dependency of the frameless-dataset module is on shapeless 2.3.2. Therefore, depending on frameless-dataset, has a minimal overhead on your Spark's application jar. Only the frameless-cats module depends on cats and cats-effect, so if you prefer to work just with Datasets and not with RDDs, you may choose not to depend on frameless-cats.

Frameless intentionally does not have a compile dependency on Spark. This essentially allows you to use any version of Frameless with any version of Spark. The aforementioned table simply provides the versions of Spark we officially compile and test Frameless with, but other versions may probably work as well.

Breaking changes in 0.9

  • Spark 3 introduces a new ExpressionEncoder approach, the schema for single value DataFrame's is now "value" not "_1".

Why?

Frameless introduces a new Spark API, called TypedDataset. The benefits of using TypedDataset compared to the standard Spark Dataset API are as follows:

  • Typesafe columns referencing (e.g., no more runtime errors when accessing non-existing columns)
  • Customizable, typesafe encoders (e.g., if a type does not have an encoder, it should not compile)
  • Enhanced type signature for built-in functions (e.g., if you apply an arithmetic operation on a non-numeric column, you get a compilation error)
  • Typesafe casting and projections

Click here for a detailed comparison of TypedDataset with Spark's Dataset API.

Documentation

  • TypedDataset: Feature Overview
  • Typed Spark ML
  • Comparing TypedDatasets with Spark's Datasets
  • Typed Encoders in Frameless
  • Injection: Creating Custom Encoders
  • Job[A]
  • Using Cats with RDDs
  • Proof of Concept: TypedDataFrame

Quick Start

Since the 0.9.x release, Frameless is compiled only against Scala 2.12.x.

To use Frameless in your project add the following in your build.sbt file as needed:

val framelessVersion = "<latest version>"

resolvers ++= Seq(
  // for snapshot artifacts only
  "s01-oss-sonatype" at "https://s01.oss.sonatype.org/content/repositories/snapshots"
)

libraryDependencies ++= List(
  "org.typelevel" %% "frameless-dataset" % framelessVersion,
  "org.typelevel" %% "frameless-ml"      % framelessVersion,
  "org.typelevel" %% "frameless-cats"    % framelessVersion
)

An easy way to bootstrap a Frameless sbt project:

  • if you have Giter8 installed then simply:
g8 imarios/frameless.g8
  • with sbt >= 0.13.13:
sbt new imarios/frameless.g8

Typing sbt console inside your project will bring up a shell with Frameless and all its dependencies loaded (including Spark).

Need help?

Feel free to messages us on our discord channel for any issues/questions.

Development

We require at least one sign-off (thumbs-up, +1, or similar) to merge pull requests. The current maintainers (people who can merge pull requests) are:

  • adelbertc
  • imarios
  • kanterov
  • non
  • OlivierBlanvillain

Testing

Frameless contains several property tests. To avoid OutOfMemoryErrors, we tune the default generator sizes. The following environment variables may be set to adjust the size of generated collections in the TypedDataSet suite:

Property Default
FRAMELESS_GEN_MIN_SIZE 0
FRAMELESS_GEN_SIZE_RANGE 20

License

Code is provided under the Apache 2.0 license available at http://opensource.org/licenses/Apache-2.0, as well as in the LICENSE file. This is the same license used as Spark.

About

Expressive types for Spark.

Topics

fpfunctional-programmingscalasparktypelevel

Resources

Readme
Apache-2.0 license

Code of conduct

Code of conduct

Contributing

Contributing

Security policy

Security policy
Activity
Custom properties

Stars

898 stars

Watchers

23 watching

Forks

136 forks
Report repository

Releases

Sponsor this project

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.