2016-05-16 8 views
0

Ich habe einen pyspark DataFrame, sagen df1, mit mehreren Spalten.Erstellen einer Spalte basierend auf einer Liste und Spalte in Pyspark

Ich habe auch eine Liste, sagen wir l = ['a','b','c','d'] und diese Werte sind die Teilmenge der Werte in einer der Spalten im DataFrame.

Nun würde Ich mag so etwas tun:

df2 = df1.withColumn('new_column', expr("case when col_1 in l then 'yes' else 'no' end")) 

Dies ist aber die folgenden Fehler werfen:

failure: "(" expected but identifier l found.

Jede Idee, wie diese Fehler zu beheben oder einen besseren Weg zu tun es?

Antwort

3

Sie können das erreichen mit der isin Funktion des Column Objekt:

df1 = sqlContext.createDataFrame([('a', 1), ('b', 2), ('c', 3)], ('col1', 'col2')) 
l = ['a', 'b'] 

from pyspark.sql.functions import * 
df2 = df1.withColumn('new_column', when(col('col1').isin(l), 'yes').otherwise('no')) 

df2.show() 

+----+----+----------+ 
|col1|col2|new_column| 
+----+----+----------+ 
| a| 1|  yes| 
| b| 2|  yes| 
| c| 3|  no| 
+----+----+----------+ 

Hinweis: Für Funken < 1.5 verwenden inSet statt isin.

Referenz: pyspark.sql.Columndocumentation

+0

Es funktioniert. Danke vielmals! :) – Hemant

Verwandte Themen