Pyspark:如何在同一操作中估算 DataFrame 中的多个列?

Pyspark: How to impute multiple columns in DataFrame in the same action?

很抱歉有类似的问题 post 但这是同一代码的不同问题。我正在尝试估算所有这些列:

('exact_age','lnght_of_resd','acct_tenure_mnth_nbr','acct_ttce_mnth_nbr','tot_promo_amt', 'tot_rev_amt','int_base_pkg_speed','int_mx_elgbl_speed') 

使用下面的代码,但只估算了第一列。我猜它与 first() 函数有关。但是,我不知道如何修改代码以便它可以遍历所有列。当我 运行 这段代码时, exact_age 被正确估算,但其他代码没有。任何帮助表示赞赏。谢谢

removeAllDF = df_data.na.drop()
imputeDF = df_data['exact_age','lnght_of_resd','acct_tenure_mnth_nbr','acct_ttce_mnth_nbr','tot_promo_amt','tot_rev_amt','int_base_pkg_speed','int_mx_elgbl_speed']
for x in imputeDF.columns:
    meanValue = removeAllDF.agg(avg(x)).first()[0]
    print(x, meanValue)
    df_data = df_data.na.fill(meanValue, (x))

df_data.show()

您实际上不需要遍历每一列。您可以一次计算所有均值并执行一次 df_data.na.fill 调用:

impute_cols = [
    'exact_age', 'lnght_of_resd', 'acct_tenure_mnth_nbr',
    'acct_ttce_mnth_nbr', 'tot_promo_amt', 'tot_rev_amt',
    'int_base_pkg_speed', 'int_mx_elgbl_speed'
]

mean_df = df_data.na.drop().agg(*[avg(c).alias(c) for c in impute_cols])

df_data = df_data.na.fill(mean_df.first().asDict())