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))