2 votes

Comment obtenir l'accès au Row complet dans la fonction UDF de Spark ?

Nous utilisons une syntaxe SQL simple pour transformer les données et nous avons des fonctions UDF personnalisées. Exemple :

UDF_FUNCTION(String, Int)

Cette fonction pourrait produire des exceptions et nous voudrions fournir une erreur détaillée pour l'utilisateur. Dans la ligne, nous avons des informations sur le fichier et le row_id, c'est pourquoi nous voulons accéder à une ligne complète dans l'UDF mentionné pour fournir une erreur détaillée avec file_uuid et row_id par exemple. Quelqu'un a-t-il une idée à ce sujet ?

Gracias

3voto

EmiCareOfCell44 Points 1105

Vous pouvez utiliser struct pour envoyer toutes les colonnes à l'udf. Vous devez utiliser Rangée comme paramètre d'entrée dans la fonction anonyme de l'udf. Quelque chose comme l'exemple ci-dessous :

  def udf_full_row = udf { (row: Row) =>
    val your_transformed_int = (row.getAs[Int]("value as int") + 1)
    your_transformed_int
  }

  import org.apache.spark.sql.functions.{col, struct}

  val df_test : DataFrame = ???
  val cols_array = df_test.columns.map(col(_))

  df_test.withColumn("your_new_colun", udf_full_row(struct(cols_array: _*)))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X