typelevel / typelevel/frameless

Missing Dataset methods

Open
#163 3 comments 8 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

beginner friendly feature
Dominant language
Scala
Stars
895
Forks
135
Avg merge
1d 16h
Merged PRs (30d)
3

Description

Here is an exhaustive status of the API implemented by frameless.TypeDataset compared to Spark's Dataset. We are getting pretty close to 100% API coverage 😄

Won't fix:

  • Dataset alias(String alias) inherently unsafe
  • Dataset withColumnRenamed(String existingName, String newName) inherently unsafe
  • void createGlobalTempView(String viewName) inherently unsafe
  • void createOrReplaceTempView(String viewName) inherently unsafe
  • void createTempView(String viewName) inherently unsafe
  • void registerTempTable(String tableName) inherently unsafe
  • Dataset where(String conditionExpr) use select instead

TODO:

  • KeyValueGroupedDataset<K,T> groupByKey(scala.Function1<T,K> func, Encoder evidence3)
  • DataFrameNaFunctions na()
  • DataFrameStatFunctions stat()
  • Dataset dropDuplicates(String col1, String... cols)
  • Dataset describe(String... cols)
  • DataStreamWriter writeStream() (see #232)
  • Dataset withWatermark(String eventTime, String delayThreshold) (see #232)
  • RelationalGroupedDataset cube(Column... cols) (WIP #246)
  • RelationalGroupedDataset rollup(String col1, String... cols) (WIP #246)

Done:

  • Dataset sort(String sortCol, String... sortCols) (#248)
  • Dataset sortWithinPartitions(String sortCol, String... sortCols) (#248)
  • Dataset repartition(int numPartitions, Column... partitionExprs)
  • Dataset drop(String... colNames) (#209)
  • Dataset join(Dataset<?> right, Column joinExprs, String joinType)
  • Dataset<scala.Tuple2<T,U>> joinWith(Dataset other, Column condition, String joinType)
  • Dataset crossJoin(Dataset<?> right)
  • Dataset agg(Column expr, Column... exprs)
  • Column apply(String colName)
  • Dataset as(Encoder evidence2)
  • Dataset cache()
  • Dataset coalesce(int numPartitions)
  • Column col(String colName)
  • Object collect()
  • long count()
  • Dataset distinct()
  • Dataset except(Dataset other)
  • void explain(boolean extended)
  • <A,B> Dataset explode(String inputColumn, String outputColumn, scala.Function1<A,TraversableOnce<B f)
  • Dataset filter(Column condition)
  • Dataset filter(scala.Function1<T,Object> func)
  • T first() (as firstOption)
  • Dataset flatMap(scala.Function1<T,TraversableOnce> func, Encoder evidence8)
  • void foreach(ForeachFunction func)
  • void foreachPartition(scala.Function1<Iterator,scala.runtime.BoxedUnit> f)
  • RelationalGroupedDataset groupBy(String col1, String... cols)
  • Dataset intersect(Dataset other)
  • Dataset limit(int n)
  • Dataset map(scala.Function1<T,U> func, Encoder evidence6)
  • Dataset mapPartitions(MapPartitionsFunction<T,U> f, Encoder encoder)
  • Dataset persist(StorageLevel newLevel)
  • void printSchema()
  • RDD rdd()
  • T reduce(scala.Function2<T,T,T> func) (as reduceOption)
  • Dataset repartition(int numPartitions)
  • Dataset sample(boolean withReplacement, double fraction, long seed)
  • Dataset select(String col, String... cols)
  • void show(int numRows, boolean truncate)
  • Object take(int n)
  • Dataset toDF()
  • String toString()
  • Dataset transform(scala.Function1<Dataset,Dataset> t)
  • Dataset union(Dataset other)
  • Dataset unpersist(boolean blocking)
  • Dataset withColumn(String colName, Column col)
  • Dataset orderBy(String sortCol, String... sortCols)
  • String[] columns()
  • org.apache.spark.sql.execution.QueryExecution queryExecution()
  • StructType schema()
  • SparkSession sparkSession()
  • SQLContext sqlContext()
  • Dataset checkpoint(boolean eager)
  • String[] inputFiles()
  • boolean isLocal()
  • boolean isStreaming()
  • Dataset[] randomSplit(double[] weights, long seed)
  • StorageLevel storageLevel()
  • Dataset toJSON()
  • java.util.Iterator toLocalIterator()
  • DataFrameWriter write()

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reviewing frameless.TypeDataset and comparing its API with the listed Spark Dataset TODO entries. Check the referenced issues for writeStream and withWatermark before choosing a method. Done means the selected missing API methods are implemented and the TODO list accurately reflects their status.

Written by the indexing model from the issue text.

Assessment

Tech stack
scala, spark
Domain
data-engineering
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.