我有一个具有日期范围和一些计数的数据框,我想仅使用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})