我想在Pyspark数据帧中转换SQL DECODE函数逻辑。最好的实现方式是什么?
decode(true,
is_date(DATE,'mm/dd/yy'),to_date(DATE,'mm/dd/yy'),
is_date(DATE,'month dd,yyyy'),to_date(DATE,'month dd,yyyy'),
is_date(DATE,'dd month,yyyy'),to_date(DATE,'dd month,yyyy'),
is_date(DATE,'mm/dd/yyyy'),to_date(DATE,'mm/dd/yyyy') ,null)
请提出任何建议。
答案 0 :(得分:0)
使用case
。您的decode()
以true
开头,这似乎不正确。所以,我想你想要
(case when is_date(DATE, 'mm/dd/yy') then to_date(DATE,'mm/dd/yy')
when is_date(DATE, 'month dd,yyyy') then to_date(DATE,'month dd,yyyy')
when is_date(DATE, 'dd month,yyyy') then to_date(DATE, 'dd month,yyyy'),
when is_date(DATE, 'mm/dd/yyyy') then to_date(DATE, 'mm/dd/yyyy')
end)
我不知道您的环境是否支持带有格式参数的is_date()
或to_date()
(这些不是标准的SparkSQL函数),但是您的问题是关于decode()
的。
如果您的问题确实与这些功能有关,请提出一个 new 问题,并明确说明该问题以及示例数据和所需结果。
答案 1 :(得分:0)
以下代码可能对您有所帮助:
df.withColumn('col1_modified', when(df.col1.isNull(), 'user_defined_1').when(df.col1==<col1_value>, 'user_defined_2').otherwise(df.col1)).show()