Dataframe 如何在pyspark中进行年龄分组?

Dataframe 如何在pyspark中进行年龄分组?,dataframe,pyspark,rdd,Dataframe,Pyspark,Rdd,假设我有一个带有数字列年龄的数据框 我想根据年龄值生成一个新列 大概是这样的: Age | New Age Range ----------------------------------- 4 | 0-18 25 | 19-65 90 | 65+ .... | .... 我想用一个函数 def AgeByRange(Age): fo

假设我有一个带有数字列年龄的数据框

我想根据年龄值生成一个新列

大概是这样的:

   Age       |    New Age Range
-----------------------------------
    4        |        0-18
   25        |        19-65
   90        |        65+
  ....       |        ....
我想用一个函数

def AgeByRange(Age):
  for i in Age:
    if i < 19:
      return '0-18'
    elif ......
def AgeByRange(年龄):
就我的年龄而言:
如果i<19:
返回“0-18”
埃利夫。。。。。。

但是我怀疑有更好的方法可以做到这一点。

您好,您可以简单地创建带有范围的数据帧并使用join,例如

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()
从pyspark.sql.types导入*
df=sqlctx.createDataFrame([(1)、(25)、(90)],IntegerType())。withColumnRename('value','age'))
df2=sqlctx.createDataFrame([(0,18,'0-18'),(19,65,'19-65'),(659999,'65+)],[“年龄”、“年龄到”、“范围])

df_join=df.join(df2,(df.age>=df2.age_f)和(df.age您可以使用sql函数udf和withColumn来实现

from pyspark.sql.functions import udf
 age_range = udf(lambda age: '< 20' if age < 20 else 
                       '20-25' if (age >= 20 and age < 25) else
                       '25-30' if (age >= 25 and age < 30) else
                       '30-35' if (age >= 30 and age < 35) else
                       '35-40' if (age >= 35 and age < 40) else
                       '40-45' if (age >= 40 and age < 45) else
                       '45-50' if (age >= 45 and age < 50) else
                       '50-55' if (age >= 50 and age < 55) else
                       '55-60' if (age >= 55 and age < 60) else
                       '60-65' if (age >= 60 and age < 65) else
                       '65-70' if (age >= 65 and age < 70) else
                        '75+'  if (age >= 70) else '')

 df = df.withColumn('age_range', age_range(df.Age))
从pyspark.sql.functions导入udf
年龄范围=udf(如果年龄<20,则λ年龄:'<20',否则
“20-25”如果(年龄>=20且年龄<25)其他
“25-30”如果(年龄>=25且年龄<30)其他
“30-35”如果(年龄>=30且年龄<35)其他
“35-40”如果(年龄>=35且年龄<40)其他
“40-45”如果(年龄>=40且年龄<45)其他
“45-50”如果(年龄>=45且年龄<50)其他
“50-55”如果(年龄>=50且年龄<55)其他
“55-60”如果(年龄>=55且年龄<60)其他
“60-65”如果(年龄>=60且年龄<65)其他
“65-70”如果(年龄>=65且年龄<70)其他
“75+”如果(年龄>=70)其他“”)
df=df.withColumn('age\u range',age\u range(df.age))