Here is some back-story: https://issues.apache.org/jira/browse/SPARK-32683
I think the answer may be: use "F"?

On Fri, Feb 11, 2022 at 12:43 PM Appel, Kevin <kevin.ap...@bofa.com.invalid>
wrote:

> Previously in Spark2 we could use the spark function date_format with the
> “W” flag and it will provide back the week of month of that date.  In
> Spark3 when trying this there is an error back:
>
>
>
> ·         org.apache.spark.SparkUpgradeException: You may get a different
> result due to the upgrading of Spark 3.0: Fail to recognize 'W' pattern in
> the DateTimeFormatter. 1) You can set spark.sql.legacy.timeParserPolicy to
> LEGACY to restore the behavior before Spark 3.0. 2) You can form a valid
> datetime pattern with the guide from
> https://spark.apache.org/docs/latest/sql-ref-datetime-pattern.html
>
>
>
> ·         Caused by: java.lang.IllegalArgumentException: All week-based
> patterns are unsupported since Spark 3.0, detected: W, Please use the SQL
> function EXTRACT instead
>
>
>
> If I use the first solution and set the policy to LEGACY, currently it is
> EXCEPTION, then the code runs through
>
>
>
> spark.conf.set("spark.sql.legacy.timeParserPolicy","LEGACY")
>
>
>
> df1 = spark.createDataFrame(
>
>     [
>
>         (1, date(2014, 3, 7)),
>
>         (2, date(2014, 3, 8)),
>
>         (3, date(2014, 3, 30)),
>
>         (4, date(2014, 3, 31)),
>
>         (5, date(2015, 3, 7)),
>
>         (6, date(2015, 3, 8)),
>
>         (7, date(2015, 3, 30)),
>
>         (8, date(2015, 3, 31)),
>
>     ],
>
>     schema="a long, b date",
>
> )
>
> df1 = df1.withColumn("WEEKOFMONTH", F.date_format(F.col("b"), "W"))
>
> df1.show()
>
>
>
> +---+----------+-----------+
>
>
> |  a|         b|WEEKOFMONTH|
>
> +---+----------+-----------+
>
> |  1|2014-03-07|          2|
>
> |  2|2014-03-08|          2|
>
> |  3|2014-03-30|          6|
>
> |  4|2014-03-31|          6|
>
> |  5|2015-03-07|          1|
>
> |  6|2015-03-08|          2|
>
> |  7|2015-03-30|          5|
>
> |  8|2015-03-31|          5|
>
> +---+----------+-----------+
>
>
>
> Trying to explore the latter options, in both the EXTRACT and the datetime
> patterns that are listed, I don’t see that there is the “W” option or
> equivalent way to produce this.
>
> The datetime link mentions: In Spark 3.0, we define our own pattern
> strings in Datetime Patterns for Formatting and Parsing
> <https://spark.apache.org/docs/3.2.1/sql-ref-datetime-pattern.html>,
> which is implemented via DateTimeFormatter
> <https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html>
>  under
> the hood.
>
> If I follow the link into the DateTimeFormatter then I see the W existing
> there:
>
>    W       week-of-month               number            4
>
>
>
> My first question is, with the Spark3 and not setting the policy to
> LEGACY, is there no longer a way to compute this using the spark built in
> functions?
>
>
>
> The second question is, if we are setting the policy to LEGACY, is there
> any caveats or items to be aware of that might get us later? For example in
> a future Spark 3.3.X is this option going to be deprecated
>
>
>
> This was an item that we ran into from Spark2 to Spark3 conversion and
> trying to see how to best handle this
>
>
>
> Thanks for your feedback,
>
>
>
> Kevin
>
>
>
>
>
>
>
>
> ------------------------------
> This message, and any attachments, is for the intended recipient(s) only,
> may contain information that is privileged, confidential and/or proprietary
> and subject to important terms and conditions available at
> http://www.bankofamerica.com/emaildisclaimer. If you are not the intended
> recipient, please delete this message.
>

Reply via email to