如何使用pyspark绘制时间序列折线图

How to draw time series line chart using pyspark

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

使用 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")