对于pyspark的dataframe写自定义函数时,需要传多个参数的解决方案
原本的UDF函数使用方式:
这里udf的作用是 根据dataframe中的一列时间exptime,添加新的一列,此列为exptime未来三天时间的时间序列
from pyspark.sql import SparkSession
from pyspark.conf import SparkConf
from datetime import datetime, timedelta, date
from pyspark.sql.types import *
from pyspark.sql.functions import udf
import pandas as pd
def getDataRange(value):
# 省略具体逻辑
return value
date_range = udf(getDataRange, StringType())
# 如果想要返回list而不是string类型的
# data_range = udf(getDataRane, ArrayType(StringType()))
# 假设已有expire_df
expire_df.withColumn('pt', data_range('exptime').show()
上面就是正常的无参数写法,如果要除了列,多加一个别的参数,传入自定义函数中
def getDataRange(value, n):
# 省略具体逻辑
return value
# 注册udf函数是 试用lambda 将参数传进去就好了
date_range = udf(lambda x: getDateRange(x, 3), StringType())
expire_df.withColumn('pt', data_range('exptime').show()
是不是很简单( ̄▽ ̄)"