0

Nouveau sur Spark.étincelle: ligne à élément

Je voudrais faire une transformation sur la colonne "wordList" d'un DataFrame spark, df, du type org.apache.spark.sql.DataFrame = [id: string, wordList: array<string>].

J'utilise dataBricks. df ressemble:

+--------------------+--------------------+ 
|     id|   wordList| 
+--------------------+--------------------+ 
|08b0a9b6-3b9a-47a...|     [a]| 
|23c2ef79-8dce-4ad...|[ag, adfg, asdfgg...| 
|26a7682f-2ce6-4eb...|[ghe, gener, ghee...| 
|2ab530b5-04bc-463...|[bap, pemm, pava,...| 
+--------------------+--------------------+ 

Plus précisément, j'ai défini une fonction shrinkList (ol: Liste [String]): qui prend une liste Liste [chaîne] et retourne une liste plus courte, et que vous souhaitez appliquer sur la colonne wordList. La question est, comment puis-je convertir la ligne en une liste?

df.select("wordList").map(t => shrinkList(t(1))) donnent l'erreur: type mismatch; found : Any required: List[String]

Aussi, je ne suis pas sûr "t (1)" ici. Je préfère utiliser le nom de la colonne au lieu de l'index, au cas où l'ordre des colonnes changerait dans le futur. Mais je ne peux pas sembler faire t $ "wordList" ou t.wordList ou t ("wordList") travail. Donc, au lieu d'utiliser t (1), quel sélecteur puis-je utiliser pour sélectionner la colonne "wordList"?

Répondre

1

Essayez:

df.select("wordList").map(t => shrinkList(t.getSeq[String](0).toList)) 

ou

df.select("wordList").map(t => shrinkList(t.getAs[Seq[String]]("wordList").toList)) 
+0

Merci @LostInOverflow. Mes databricks sont juste morts et je ne peux pas l'essayer maintenant, mais je vais l'essayer quand ça marchera à nouveau. Question: au lieu d'utiliser "1", puis-je utiliser le nom de la colonne d'une manière ou d'une autre? – MichM

+0

Comme ceci 'getAs [Seq [String]] (" some_name "). ToList' Je pense. –

+0

la réponse que j'ai essayé a donné une erreur: 'incompatibilité de type; trouvé: java.util.List [Chaîne] requis: scala.collection.immutable.List [Chaîne] '. Votre code dans le commentaire fonctionne bien. Voulez-vous modifier le code dans votre réponse originale, en gardant le "(1)", comme une réponse correcte alternative, de sorte que je puisse l'accepter? – MichM