在PySpark中按特定日期分组

时间:2018-11-09 13:01:59

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

我有一个具有日期范围和一些计数的数据框,我想仅使用spark汇总每个日期以及直到某一点的所有日期。

dates = pd.date_range(start='2018-10-20', end='2018-11-10', freq='D').astype('str')
df = pd.Series(dates)
df = spark.createDataFrame(df, StringType())
df = df.withColumn('users', (F.randn(1)*10).astype(IntegerType()))

以下是数据框外观的示例:

+----------+-----+
|     value|users|
+----------+-----+
|2018-10-20|  -10|
|2018-10-21|    2|
|2018-10-22|    6|
|2018-10-23|    2|

这是预期输出的示例:

    all_users  daily       dates
0           1      1  2018-10-20
1           2      1  2018-10-21
2           3      1  2018-10-22
3           4      1  2018-10-23

我目前获取先前输出的解决方案是使用外部for循环和熊猫的解决方法,但这显然不可扩展,这是我当前的解决方案:

daily_users = []
all_users = []

for d in dates:
    daily_users.append(df.where(F.col('value') == d).count())
    all_users.append(df.where(F.col('value') <= d).count())

df1 = pd.DataFrame(data={'dates':dates.values,'daily':daily_users,'all_users':all_users})

0 个答案:

没有答案