J'essaye d'utiliser la fonction round () dans les databricks pour arrondir certaines valeurs flottantes à 2 chiffres. Cependant, le python databricks ne fonctionne pas comme le python normal.
S'il vous plaît, aidez-moi avec les raisons et les solutions le cas échéant.
TypeError: Invalid argument, not a string or column: -12.1334 of type <type 'float'>. For column literals, use 'lit', 'array', 'struct' or 'create_map' function.
lis = [-12.1334, 12.23433, 1.2343, -104.444] lis2 = [round(val,2) for val in lis] print(lis2)
Preuve de code d'image
4 Réponses :
Essayez ceci:
lis = [-12.1334, 12.23433, 1.2343, -104.444] list_em = [] for row in lis: list_em.append(round(row,2)) print(list_em) [-12.13, 12.23, 1.23, -104.44]
Cela n'explique pas du tout le problème. Le code OP publié n'a même pas de problème reproductible.
Cela ne fonctionne pas non plus. Lorsque je lance dans le bloc-notes databricks, la fonction round ne fonctionne pas. Vous pouvez vérifier la preuve d'image ci-jointe.
Je crois que c'est le code source de la fonction que vous appliquez:
def round(col, scale=0): """ Round the given value to `scale` decimal places using HALF_UP rounding mode if `scale` >= 0 or at integral part when `scale` < 0. >>> spark.createDataFrame([(2.5,)], ['a']).select(round('a', 0).alias('r')).collect() [Row(r=3.0)] """ sc = SparkContext._active_spark_context return Column(sc._jvm.functions.round(_to_java_column(col), scale))
Il est clairement indiqué de passer dans une colonne, pas dans un nombre décimal. Avez-vous importé *? Cela aurait pu remplacer la fonction intégrée.
Oui. J'ai supprimé toute l'importation de trucs d'étincelles. Maintenant ça marche. C'était un problème de remplacement de la fonction ronde. Merci.
Ceci n'est reproductible que lorsque vous importez la fonction spark round du module function
dans spark.sql
La fonction spark round nécessite une chaîne ou une colonne. Ce qui explique l'erreur.
Vous pouvez soit aliaser l'importation comme import pyspark.sql.functions comme F
au lieu de à partir de pyspark.sql.functions import * code>
Vous pouvez obtenir la méthode d'origine round
de cette façon.
lis = [-12.1334, 12.23433, 1.2343, -104.444] lis2 = [round(val, 2) for val in lis] print(lis2)
Et ensuite vous pouvez exécuter
import builtins round = getattr(builtins, "round")
A travaillé comme un charme! Merci.
Bonjour, La question est probablement liée à un conflit d'espace de nom. J'ai couru quelque chose comme
import pyspark.sql.functions as F lis = [-12.1334, 12.23433, 1.2343, -104.444] lis2 = [round(val,2) for val in lis] print(lis2) [-12.13, 12.23, 1.23, -104.44]
qui contient la fonction round . Vous pouvez facilement voir quel cycle est utilisé en exécutant l'aide dessus:
help(round)
Une solution simple pour cela consiste à désigner la fonction pyspark dans un espace de nom différent.
XXX
Ce code ne produit pas l'erreur revendiquée. Veuillez poster votre vrai code.
Impossible de recréer l'erreur non plus
preuve d'image ajoutée pour plus de commodité
En outre, le code doit être exécuté dans un bloc-notes databricks par opposition à la manière normale de python. La méthode python normale fonctionnera sans aucune erreur. Le problème concerne le python basé sur les databricks.
Cela vous a-t-il aidé?