Étincelle d'Erreur:attendu des arguments zéro pour la construction de ClassDict (pour numpy.de base.multiarray._reconstruct)
J'ai un dataframe Spark dans lequel l'une des colonnes contient un tableau.Maintenant,j'ai écrit un séparé de l'UDF, qui convertit le tableau à un autre tableau avec des valeurs distinctes dans le seulement. Voir l'exemple ci-dessous:
Ex: [24,23,27,23] devrait se converti à [24, 23, 27]
Code:
def uniq_array(col_array):
x = np.unique(col_array)
return x
uniq_array_udf = udf(uniq_array,ArrayType(IntegerType()))
Df3 = Df2.withColumn("age_array_unique",uniq_array_udf(Df2.age_array))
Dans le code ci-dessus, Df2.age_array
est la matrice sur laquelle je suis en application de l'UDF pour obtenir une autre colonne "age_array_unique"
qui ne doivent contenir que des valeurs uniques dans le tableau.
Cependant, dès que je lance la commande Df3.show()
, j'obtiens l'erreur:
net.razorvine.cornichon.PickleException: attendu des arguments zéro pour la construction de ClassDict (pour numpy.de base.multiarray._reconstruct)
Quelqu'un peut s'il vous plaît laissez-moi savoir pourquoi ce qui se passe?
Merci!
OriginalL'auteur Preyas | 2016-08-16
Vous devez vous connecter pour publier un commentaire.
La source du problème est que l'objet retourné à partir de l'UDF ne sont pas conformes au type déclaré.
np.unique
ne retourne pas uniquementnumpy.ndarray
mais aussi de convertir des nombres correspondantNumPy
types qui ne sont pas compatibles avecDataFrame
API. Vous pouvez essayer quelque chose comme ceci:ou ce (pour maintenir l'ordre)
à la place.
Si vous voulez vraiment
np.unique
vous devez convertir la sortie:OriginalL'auteur zero323
Vous avez besoin de convertir la valeur finale à une liste python. Vous implémentez la fonction comme suit:
C'est parce que l'Étincelle ne comprends pas le tableau numpy format. Afin de nourrir un objet python qui Étincelle DataFrames comprendre comme une
ArrayType
, vous avez besoin pour convertir la sortie d'un pythonlist
avant de le retourner.OriginalL'auteur user1632287