如何在 SPARK SQL API 中将 YYYY-MM-DD 转换为 YYYYMMDD [重复]

Posted

技术标签:

【中文标题】如何在 SPARK SQL API 中将 YYYY-MM-DD 转换为 YYYYMMDD [重复]【英文标题】:How to convert YYYY-MM-DD into YYYYMMDD in SPARK SQL API [duplicate] 【发布时间】:2021-11-25 11:40:10 【问题描述】:

如何在 spark sql 中将 YYYY-MM-DD 转换为 YYYYMMDD。 例子 2021-11-25 应该是 20211121。

在 SQL SERVER 中,借助 convert() 或 Format() 很容易。 如何在 SPARK SQL 中做到这一点?

我不想将其转换为 DataFrame 或 DF 。使用 spark sql 寻找答案。

这不是一个重复的问题。我需要使用 SQL Api 而不是 Pyspark 来完成这项工作!

【问题讨论】:

记住 YYYY-MM-DD 是 ISO 日期格式。 这能回答你的问题吗? Convert date from String to Date format in Dataframes,甚至是docs 对不起,所有这些都是 DataFrame 操作。我正在寻找 spark sql 【参考方案1】:

请先检查表的架构,因为字段可以是日期或字符串。

# dateframe with date as string and date as date
df = (spark.createDataFrame(["date_str": "2021-11-01", "date_str": "2021-11-02"])
      .withColumn("date_date", expr(" to_date(date_str) "))
     )

df.show()
df.schema

>>Out[1]:
>>+----------+----------+
>>|  date_str| date_date|
>>+----------+----------+
>>|2021-11-02|2021-11-02|
>>+----------+----------+
>>Out[2]: StructType(List(StructField(date_str,StringType,true),StructField(date_date,DateType,true)))

我们可以在上面看到我们的字符串日期和作为日期对象的日期都是:YYYY-MM-DD。现在让我们将两者都转换为 YYYYMMDD:

df_converted = (df
.withColumn("date_str_converted", expr(" date_format(to_date(date_str), 'yyyyMMdd') "))
.withColumn("date_date_converted", expr(" date_format(date_date, 'yyyyMMdd')  "))
               )
            
df_converted.show()
>>Out[3]:
>>+----------+----------+------------------+-------------------+
>>|  date_str| date_date|date_str_converted|date_date_converted|
>>+----------+----------+------------------+-------------------+
>>|2021-11-02|2021-11-02|          20211102|           20211102|
>>+----------+----------+------------------+-------------------+

【讨论】:

感谢 Python spark 中的回答。这可以使用 SQL API 完成吗? 是的,这就是我使用 expr 的原因,基本上您需要将表达式中的内容放入 SELECT 中,例如 SELECT date_format(to_date(date_str), 'yyyyMMdd') FROM df (请记住,您需要注册如果您有非 SQL 数据框,则在该表或视图之前)

以上是关于如何在 SPARK SQL API 中将 YYYY-MM-DD 转换为 YYYYMMDD [重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何在presto sql中将字符串'yyyy-mm-dd'转换为日期格式

如何在 Bluemix 中将 SQL 数据库加载到 Analytics for Apache Spark?

如何在 Spark SQL 中将额外参数传递给 UDF?

如何在Spark sql中将列转换为Int

Scala - 如何在 Spark SQL 查询中将日期字符串转换为时间戳?

在 Hive 中将 Long 转换为时间戳