【发布时间】:2018-01-25 13:22:32
【问题描述】:
我有一个用户定义的函数,如下所示,我想用它来派生数据框中的新列:
def to_date_formatted(date_str, format):
if date_str == '' or date_str is None:
return None
try:
dt = datetime.datetime.strptime(date_str, format)
except:
return None
return dt.date()
spark.udf.register("to_date_udf", to_date_formatted, DateType())
我可以通过运行像select to_date_udf(my_date, '%d-%b-%y') as date 这样的sql 来使用它。注意将自定义格式作为参数传递给函数的能力
但是,我正在努力使用 pyspark 列表达式语法而不是 sql 来使用它
我想写这样的东西:
df.with_column("date", to_date_udf('my_date', %d-%b-%y')
但这会导致错误。我该怎么做?
[编辑:在此特定示例中,在 Spark 2.2+ 中,您可以使用内置的 to_date 函数提供可选格式参数。我目前在 Spark 2.0 上,所以这对我来说是不可能的。另外值得注意的是,我提供了这个作为示例,但我感兴趣的是为 UDF 提供参数的一般语法,而不是日期转换的细节]
【问题讨论】:
-
谢谢您-该问题的答案很有用并证实了我的发现。我花了一段时间谷歌试图找到这个问题的答案,但我正在更广泛地搜索“pyspark udf arguments”之类的东西,而另一个问题的标题只是与此间接相关。
标签: apache-spark pyspark pyspark-sql