如何应用函数来修改列值(pyspark 2.4.5-数据触发器)

mzillmmw  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(362)


我的目标是Map每个范围并Map到它的中间部分(15000-25000->20000)。
我整理了数据,把它浓缩到这个专栏里。如何在列本身上应用所需的转换\n将结果Map到另一列?我在网上找不到任何可以理解的关于Pypark的数据。。

kadbb459

kadbb4591#

Spark<2.4

df.withColumn('id',monotonically_increasing_id()).\
   withColumn('val',explode('jobsalary')).\
   groupBy('id').agg(avg('val').alias('mid')).\
   drop('id').show()

# +-----------+-------+

# |  jobsalary|  mid  |

# +-----------+-------+

# |15000-25000|  20000|

# +-----------+-------+
qoefvg9y

qoefvg9y2#

使用高阶函数 aggregatespark-2.4 例子:

df=spark.createDataFrame([('15000-25000',)],['jobsalary'])

from pyspark.sql.functions import *

df.withColumn("mid",expr('cast(aggregate(cast(split(jobsalary,"-") as array<int>),0,(acc,x) -> acc+x)/size(cast(split(jobsalary,"-") as array<int>)) as int)')).show()

# +-----------+-------+

# |  jobsalary|  mid  |

# +-----------+-------+

# |15000-25000|  20000|

# +-----------+-------+

相关问题