2017-05-25 3 views
0

Nehmen wir an, ich habe ein Datenframe mit einer numerischen Spalte Alter.Wie Alter Banding in Pyspark zu tun?

Ich möchte eine neue Spalte auf Werte in Alter

Etwas Ähnliches generieren:

Age  | New Age Range 
----------------------------------- 
    4  |  0-18 
    25  |  19-65 
    90  |  65+ 
    ....  |  .... 

ich der Verwendung einer Funktion gedacht ...

def AgeByRange(Age): 
    for i in Age: 
    if i < 19: 
     return '0-18' 
    elif ...... 

Bu Ich vermute, es gibt einen besseren Weg, dies zu tun.

Antwort

0

Hallo Sie können einfach erstellen Datenrahmen mit Bereichen und verwenden verbinden, zum Beispiel

from pyspark.sql.types import * 
df = sqlctx.createDataFrame([(1),(25),(90)],IntegerType()).withColumnRenamed('value','age') 

df2 = sqlctx.createDataFrame([(0,18,'0-18'),(19,65,'19-65'),(65,99999,'65+')],['age_f','age_to','range']) 

df_joined =df.join(df2,(df.age>= df2.age_f) & (df.age<=df2.age_to),'inner').select(df.age,df2.range).show() 
+0

der leicht veränderten kommen, aber das hat super funktioniert :) –