Ich möchte eine Spalte in a DataFrame
mit einem beliebigen Wert hinzufügen (das ist für jede Zeile gleich). Ich erhalte eine Fehlermeldung, wenn ich withColumn
Folgendes verwende:
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'
Es scheint, dass ich die Funktion dazu bringen kann, so zu arbeiten, wie ich möchte, indem ich eine der anderen Spalten addiere und subtrahiere (so dass sie zu Null addieren) und dann die gewünschte Zahl addiere (in diesem Fall 10):
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)]
Das ist höchst hacky, oder? Ich nehme an, es gibt einen legitimeren Weg, dies zu tun?
quelle
for i in range(len(item)) : df.withColumn('new_column', lit({}).format(i))
aber das funktioniert nichtIn Spark 2.2 gibt es zwei Möglichkeiten, einen konstanten Wert in einer Spalte in DataFrame hinzuzufügen:
1) Verwenden
lit
2) Verwenden
typedLit
.Der Unterschied zwischen beiden besteht darin, dass
typedLit
auch parametrisierte Scala-Typen wie List, Seq und Map verarbeitet werden könnenBeispiel DataFrame:
1) Verwenden von
lit
: Hinzufügen eines konstanten Zeichenfolgenwerts in einer neuen Spalte mit dem Namen newcol:Ergebnis:
2) Verwenden von
typedLit
:Ergebnis:
quelle