从列中的字符串值进行 PySpark 数据可视化

PySpark Data Visualization from String Values in Columns

我有一个 table,其中包含来自 Pyspark 数据帧 table 中所示的信息

我需要通过绘制给定年份中每个月完成的研究数量来执行数据可视化。我认为每个完成的(取自 status 列)将与一年中的每个月匹配,并每年汇总。

我面临的挑战是如何汇总每个已完成的月份和随后的年份,然后绘制数据。列中数据的值是字符串,将它们转换为整数是另一个挑战。

我知道我需要具有值 "Completed" 的状态并按年聚合它们以具有将绘制为 x 和 y 的两列。

任何关于如何实现这一目标的想法都将受到赞赏。

如果我对你的问题的理解正确,你正在寻找类似下面的东西:在这里你首先使用 to_date 函数将字符串值转换为实际的日期列,然后你按这样的日期列分组,然后在该 month-year 组合中计算 已完成的 项研究。

import pyspark.sql.functions as F

new_df = df \
  .filter((F.col('Status') == 'Completed') & (F.col('Completion').isNotNull())) \
  .withColumn('date', F.to_date('Completion', 'MMM yyyy')) \
  .groupby('date') \
  .count() \
  .sort('date')

示例

# this is sample data similar to yours, with only the relevant columns
df = spark.createDataFrame([
  ('Completed', 'Jul 2020'),
  ('Completed', 'Jan 2018'),
  ('Completed', 'Dec 2018'),
  ('Completed', 'Jul 2020'),
  ('Completed', 'Jan 2018'),
  ('Completed', 'Jan 2020'),
  ('Completed', None)
], ('Status', 'Completion'))

new_df = df \
  .filter((F.col('Status') == 'Completed') & (F.col('Completion').isNotNull())) \
  .withColumn('date', F.to_date('Completion', 'MMM yyyy')) \
  .groupby('date') \
  .count() \
  .sort('date')

new_df.show()
+----------+-----+
|      date|count|
+----------+-----+
|2018-01-01|    2|
|2018-12-01|    1|
|2020-01-01|    1|
|2020-07-01|    2|
+----------+-----+