Disons que j'ai un tel Dataframe.
+-----------+ |amount | +-----------+ |73 | +-----------+
4 Réponses :
Split code> La colonne dans une matrice de chaînes,
intersect code> avec une colonne littérale de valeurs que vous devez filtrer, puis vérifier si la taille de résultat est plus grande que zéro: < Pré> xxx pré> p>
Quel type d'importation utilisez-vous pour array_intersect code>? J'ai essayé d'utiliser une telle importation
importer org.apache.park.sql.functions ._ code> mais il ne peut pas résoudre le symbole aray_intersect.
Vous devriez mentionner que array_intersect code> est uniquement disponible pour Spark 2.4+
Malheureusement, dans mon cas, j'utilise Spark 2.3.3 Code>.
Le ISIN Méthode, comparez la version exacte de la chaîne latérale gauche avec une éventail de valeurs de droite. Le problème dans votre cas est, il a essayé de comparer la chaîne "100 200 300" avec chaîne "200", évidemment, elle ne correspondra pas.
Un moyen de résoudre le problème consiste à exploser la colonne String Split par virgade et ensuite faire Appliquez la méthode ISIN sur la colonne éclatée que cela fonctionnera. p>
Merci pour votre réponse. Le nom explosé code> peut-il être identique à celui de la colonne d'origine
montant code>? Je ne veux pas produire de colonnes.
@Nurzhannogerbek Vous pouvez déposer la colonne éclatée et continuer votre colonne existante. J'ai mis à jour la réponse.
Si vous avez Spark 2.4+, utilisez des fonctions de tableau tels que array_intersect code>, sinon utilisez udf:
Si vous ne pouvez pas utiliser Spark 2.4, voici un autre moyen d'utiliser array_contains code>
et Split code>
Fonctions.
First Split la colonne Montant Code> Pour obtenir la colonne Array: P>
val filterExpr = array.map(v => array_contains($"amount_array", v)).reduce(_ or _)
df2.filter(filterExpr).drop("amount_array").show()
//+-----------+
//| amount|
//+-----------+
//|100,200,300|
//| 73|
//+-----------+
Pouvez-vous partager le schéma de votre Dataframe?
Eh bien, le type de données du montant code> code> est
StringTtType code>.