【问题标题】:How to draw time series line chart using pyspark如何使用pyspark绘制时间序列折线图
【发布时间】:2023-03-22 16:00:01
【问题描述】:

我有两列的大数据集,我使用带有 pyspark 模块的 spark 来分析数据集。我尝试使用“日期”列和“计数”列绘制折线图。但是日期列包含了 4 年的详细信息,但那些不按顺序排列(按天计算),日期参差不齐。所以首先我想重新安排日期,从过去到现在。而这个日期列,数据类型是字符串。我可以知道要绘制这个时间序列折线图吗,如果我将这个字符串类型的日期值更改为日期类型值,那么这个日期列应该必须转换为“日期类型”吗?

【问题讨论】:

  • 您的问题真的是关于画线还是关于将字符串转换为日期?我知道你问的是后者。
  • 主要是我想画折线图,但在画图表之前我想按顺序转换轴
  • 好的。因此,如果您的数据集正确,您仍然不知道如何绘制折线图。对吗?
  • 我是新来的火花。我不知道使用 spark 绘制折线图。但我想为这两个变量绘制折线图,​​将数据框转换为熊猫数据框,然后使用 matplotlib 模块。但在绘图之前,我想将日期列重新排列为有序日期。
  • 是的,你是对的。在绘制图表之前,您需要将 Spark DataFrame 转换为一些 Python 数据结构。它可以是 Pandas DF 或“收集” Spark DataFrame。

标签: python pyspark time-series linechart


【解决方案1】:

使用 Spark 2.4.3,您可以像这样转换字符串日期:

import pyspark.sql.functions as sf

df = sparksession.createDataFrame(
    [("8 October 2018", 4407), ("17 September 2017", 13326)],
    ["date", "count"],
)
df.show()

df.select(
    sf.to_date("date", "d MMMMM yyyy").alias("new_date"), "date", "count"
).orderBy("new_date").show()

结果如下:

+-----------------+-----+
|             date|count|
+-----------------+-----+
|   8 October 2018| 4407|
|17 September 2017|13326|
+-----------------+-----+

+----------+-----------------+-----+
|  new_date|             date|count|
+----------+-----------------+-----+
|2017-09-17|17 September 2017|13326|
|2018-10-08|   8 October 2018| 4407|
+----------+-----------------+-----+

PS.:对于 Spark 3.0.0,字符串格式已更改。日期转换应使用字符串"d MMMM yyyy"(少一个M),因为它记录在here

图表

要绘制折线图,​​可以使用 Pandas 和 matplotlib:

pdf = (
    df.select(
        sf.to_date("date", "d MMMMM yyyy").alias("new_date"),
        "date",
        "count",
    )
    .orderBy("new_date")
    .toPandas()
)

pdf.plot.line(x="new_date", y="count")

【讨论】:

  • @bochat107 我按照您的步骤进行操作,但我的 new_date 列不像您的那样装箱。它创建空值。但是该列,值类型转换为日期。我在下面的问题区域附上了屏幕截图..
  • 哼...您使用的是哪个 Spark 版本?
  • 版本 3.0.0-preview2 这是 spark 版本
  • 正如我所怀疑的,对于较新版本的 Spark,日期格式似乎已经改变。可以试试"d MMMM yyyy"(少一个M)吗?
  • 1) 什么是 - NameError: name 'sparksession' is not defined 我该如何解决这个问题?
猜你喜欢
  • 2021-04-14
  • 2020-08-29
  • 2019-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
相关资源
最近更新 更多