Salut les gens, j'ai une fonction qui charge un ensemble de données à partir des emplacements S3 et renvoie les données intéressantesApplication conditionnelle de `filter` /` WHERE` à une étincelle `Dataset` /` Dataframe`
private def filterBrowseIndex(spark: SparkSession, s3BrowseIndex: String, mids: Seq[String] = Seq(), indices: Seq[String] = Seq()): Dataset[BrowseIndex] = {
import spark.implicits._
spark
.sparkContext.textFile(s3BrowseIndex)
// split text dataset
.map(line => line.split("\\s+"))
// get types for attributes
.map(BrowseIndex.strAttributesToBrowseIndex)
// cast it to a dataset (requires implicit conversions)
.toDS()
// pick rows for the given marketplaces
.where($"mid".isin(mids: _*))
// pick rows for the given indices
.where($"index".isin(indices: _*))
} Cette implémentation filtrera tout si quelqu'un fournit mids = Seq()
ou indices = Seq()
. D'autre part je voudrais que la sémantique soit "appliquer cette clause où seulement si mids
n'est pas vide" (idem pour indices
) de sorte qu'aucun filtrage ne se produise si l'utilisateur de la fonction fournit des séquences vides.
Existe-t-il une façon fonctionnelle de le faire?
Fonctionne pour moi merci! –