在Pyspark中解码替代

时间:2019-08-09 04:42:19

标签: sql pyspark pyspark-sql

我想在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)

请提出任何建议。

2 个答案:

答案 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()