【问题标题】:Pyspark For Loop Not Creating DataframesPyspark For Loop 不创建数据框
【发布时间】:2022-11-17 03:29:40
【问题描述】:

我有一个初始数据框df,看起来像这样:

+-------+---+-----+------------------+----+-------------------+
|gender| pro|share|        prediction|week|     forecast_units|
+------+----+-----+------------------+----+-------------------+
|  Male|Polo| 0.01| 258.4054260253906|  37|             1809.0|
|  Male|Polo|  0.1| 332.4026794433594|  38|             2327.0|
|  Male|Polo| 0.15|425.97430419921875|  39|             2982.0|
|  Male|Polo|  0.2| 508.3385314941406|  40|             3558.0|
....

我有以下代码尝试通过应用一些微积分从原始数据帧创建多个数据帧。 最初我创建了四个空数据框,然后我想循环四个不同的星期,c_weeks,并将微积分的结果保存到list_dfs 上的每个数据框:

schema = StructType([\
    StructField("gender", StringType(),True), \
    StructField("pro",StringType(),True), \
    StructField("units_1_tpr",DoubleType(),True), \
    StructField("units_1'_tpr",DoubleType(),True), \
    StructField("units_15_tpr",DoubleType(),True), \
    StructField("units_20_tpr",DoubleType(),True)])

df_wk1 = spark.createDataFrame([],schema=schema)
df_wk2 = spark.createDataFrame([],schema=schema)
df_wk3 = spark.createDataFrame([],schema=schema)
df_wk4 = spark.createDataFrame([],schema=schema)

list_dfs = [df_wk1, df_wk2, df_wk3, df_wk4]
c_weeks = [37, 38, 39, 40]

for data,weeknum in zip(list_dfs, campaign_weeks):
    data = df.filter(df.week == weeknum).groupBy(['gender', 'pro']).pivot("share").agg(first('forecast_units'))

最后,数据帧继续为空。如何解决这个问题?如果这种方式不可能,我该如何实现我想要的?

【问题讨论】:

    标签: python dataframe loops pyspark databricks


    【解决方案1】:

    如果你把df.filter(...的结果赋值给data,它就会丢失(实际上,那一行没有作用)。试试这样:

    df_wk1, df_wk2, df_wk3, df_wk4 = [
        df.filter(df.week == weeknum).groupBy(['gender', 'pro']).pivot("share").agg(first('forecast_units'))
        for weeknum in [37, 38, 39, 40]
    ]
    

    但是,df.filter(df.week == weeknum).groupBy(['gender', 'pro']).pivot("share").agg(first('forecast_units')) 创建一个 DataFrame,其架构与您可能想要的架构不同(查看您的问题)。

    这是您获得的 DataFrame 的示例:

    +------+----+------+
    |gender| pro|   0.0|
    +------+----+------+
    |  Male|Polo|3558.0|
    +------+----+------+
    

    这是它的模式:

    root
     |-- gender: string (nullable = true)
     |-- pro: string (nullable = true)
     |-- 0.0: double (nullable = true)
    

    【讨论】:

      猜你喜欢
      • 2021-12-15
      • 2013-10-13
      • 1970-01-01
      • 2012-04-01
      • 2017-03-20
      • 1970-01-01
      • 1970-01-01
      • 2020-01-17
      • 2021-12-10
      相关资源
      最近更新 更多