我的目标是创建一个udf函数并在我的sparksql查询中使用它下面是我的代码:
def get_datediff(datepart, startdatetime, enddatetime):
from alc.utils import date
from datetime import datetime
from dateutil.relativedelta import relativedelta
try:
date1 = datetime.strptime(startdatetime, '%Y-%m-%d %H:%M:%S')
date2 = datetime.strptime(enddatetime, '%Y-%m-%d %H:%M:%S')
r = relativedelta(date1, date2)
if datepart == "day":
return r.days
if datepart == "week":
return r.weeks
if datepart == "month":
return r.months
if datepart == "year":
return r.years
except Exception as e:
return None
from pyspark.sql.types import IntegerType
spark.udf.register("get_datediff", get_datediff, IntegerType())
在我的sparksql中:
SELECT get_datediff("day","2020-08-07 16:21:27", "2020-08-08 16:21:27")
当我在python中执行函数时,它工作正常并返回正确的结果,但是当我尝试在spark udf函数中注册时,它返回:importerror:没有名为dateutil.relativedelta的模块
python dateutil已经安装,但我认为spark的workers中不存在这个库
但是当我创建了一个独立的spark会话时,它运行得很好,
暂无答案!
目前还没有任何答案,快来回答吧!