Je veux ajouter une colonne dans un DataFrame
avec une valeur arbitraire (c'est la même chose pour chaque ligne). J'obtiens une erreur lorsque j'utilise withColumn
comme suit:
dt.withColumn('new_column', 10).head(5)
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-50-a6d0257ca2be> in <module>()
1 dt = (messages
2 .select(messages.fromuserid, messages.messagetype, floor(messages.datetime/(1000*60*5)).alias("dt")))
----> 3 dt.withColumn('new_column', 10).head(5)
/Users/evanzamir/spark-1.4.1/python/pyspark/sql/dataframe.pyc in withColumn(self, colName, col)
1166 [Row(age=2, name=u'Alice', age2=4), Row(age=5, name=u'Bob', age2=7)]
1167 """
-> 1168 return self.select('*', col.alias(colName))
1169
1170 @ignore_unicode_prefix
AttributeError: 'int' object has no attribute 'alias'
Il semble que je puisse tromper la fonction pour qu'elle fonctionne comme je le souhaite en ajoutant et en soustrayant l'une des autres colonnes (afin qu'elles s'ajoutent à zéro), puis en ajoutant le nombre que je veux (10 dans ce cas):
dt.withColumn('new_column', dt.messagetype - dt.messagetype + 10).head(5)
[Row(fromuserid=425, messagetype=1, dt=4809600.0, new_column=10),
Row(fromuserid=47019141, messagetype=1, dt=4809600.0, new_column=10),
Row(fromuserid=49746356, messagetype=1, dt=4809600.0, new_column=10),
Row(fromuserid=93506471, messagetype=1, dt=4809600.0, new_column=10),
Row(fromuserid=80488242, messagetype=1, dt=4809600.0, new_column=10)]
C'est extrêmement piraté, non? Je suppose qu'il existe un moyen plus légitime de le faire?
la source
for i in range(len(item)) : df.withColumn('new_column', lit({}).format(i))
mais cela ne fonctionne pasDans Spark 2.2, il existe deux façons d'ajouter une valeur constante dans une colonne de DataFrame:
1) Utilisation
lit
2) Utilisation
typedLit
.La différence entre les deux est qu'il
typedLit
peut également gérer les types de scala paramétrés, par exemple List, Seq et MapExemple de DataFrame:
1) Utilisation
lit
: Ajout d'une valeur de chaîne constante dans une nouvelle colonne nommée newcol:Résultat:
2) Utilisation
typedLit
:Résultat:
la source