web-dev-qa-db-fra.com

Spark dataframe ajoute une nouvelle colonne avec des données aléatoires

Je veux ajouter une nouvelle colonne à la structure de données avec des valeurs composées de 0 ou 1. J'ai utilisé la fonction 'randint' de,

from random import randint

df1 = df.withColumn('isVal',randint(0,1))

Mais j'obtiens l'erreur suivante,

/spark/python/pyspark/sql/dataframe.py ", ligne 1313, dans withColumn assert isinstance (col, Column)," col devrait être Column " AssertionError: col devrait être Column

comment utiliser une fonction personnalisée ou une fonction randint pour générer une valeur aléatoire pour la colonne? 

5
Dilma

Vous utilisez aléatoire python. Cela renvoie une valeur spécifique qui est constante (la valeur renvoyée).

Comme le message d'erreur le montre, nous attendons une colonne qui représente l'expression.

Pour ce faire faire:

from pyspark.sql.functions import Rand,when
df1 = df.withColumn('isVal', when(Rand() > 0.5, 1).otherwise(0))

Cela donnerait une distribution uniforme entre 0 et 1. Consultez la documentation des fonctions pour plus d'options ( http://spark.Apache.org/docs/latest/api/python/pyspark.sql.html#module-pyspark.sql .les fonctions )

8
Assaf Mendelson

Avait un problème similaire avec les valeurs entières de 5 à 10. J'ai utilisé la fonction Rand() de pyspark.sql.functions

from pyspark.sql.functions import *
df1 = df.withColumn("random", round(Rand()*(10-5)+5,0))
1
gogogod