【问题标题】:pyspark - creating a column as quarter-year from a date columnpyspark - 从日期列创建一个季度作为季度的列
【发布时间】:2020-12-01 16:16:32
【问题描述】:

我有一个这样的数据框,date 列的格式是yyyy-mm-dd

+--------+----------+---------+----------+-----------+--------------------+
|order_id|product_id|seller_id|      date|pieces_sold|       bill_raw_text|
+--------+----------+---------+----------+-----------+--------------------+
|     668|    886059|     3205|2015-01-14|         91|pbdbzvpqzqvtzxone...|
|    6608|    541277|     1917|2012-09-02|         44|cjucgejlqnmfpfcmg...|
|   12962|    613131|     2407|2016-08-26|         90|cgqhggsjmrgkrfevc...|
|   14223|    774215|     1196|2010-03-04|         46|btujmkfntccaewurg...|
|   15131|    769255|     1546|2018-11-28|         13|mrfsamfuhpgyfjgki...|
+--------+----------+---------+----------+-----------+--------------------+

我想从日期列创建并附加一个包含字母 Q、季度、下划线、年份的列到此数据框。这是我尝试过的:

from pyspark.sql import functions as F
sales_table.select(
    ("Q"+F.quarter('date')+"_"+F.date_format("date", "y")).alias('quarter_year')
).show(5)

这就是我得到的:

+------------+
|quarter_year|
+------------+
|        null|
|        null|
|        null|
|        null|
|        null|
+------------+

我的预期输出:

+---------------+
|   quarter_year|
+---------------+
|        Q1_2015|
|        Q3_2012|
|        Q3_2016|
|        Q1_2010|
|        Q4_2018|
+---------------+

我对没有错误消息和带有空值的列感到惊讶。如何创建?

【问题讨论】:

    标签: python apache-spark pyspark apache-spark-sql


    【解决方案1】:

    您不能+ 字符串列。您需要使用concat。您还需要将F.lit 用于用户指定字符串的文字列。

    我认为有一个错误 - 应该是F.year('date')?不是F.quarter('year')

    sales_table.select(
        F.concat(F.lit("Q"), F.quarter('date'), F.lit("_"), F.year('date')).alias('quarter_year')
    ).show(5)
    

    【讨论】:

    • 我来自pandas,所以我使用了+。是的,我在此处输入和复制代码时确实犯了这个错误。
    • 我已经编辑了问题并修正了这个错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-16
    • 2023-04-04
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 2020-07-12
    • 2021-10-28
    相关资源
    最近更新 更多