Python Pyspark-使用dataframe中其他两列的RMSE创建新列

Python Pyspark-使用dataframe中其他两列的RMSE创建新列,python,pyspark,Python,Pyspark,我对Pyspark是相当陌生的。我有一个数据框,我想创建一个第三列,其中RMSE的计算介于col1和col2之间。我正在使用一个用户定义的lambda函数来进行RMSE计算,但是不断得到这个错误AttributeError:'int'对象没有属性'mean' 我最好如何着手解决这个问题? 我还想找到RMSE/平均值,平均绝对误差,平均绝对误差/平均值,中间绝对误差和中间百分比误差,但一旦我知道如何计算一个,我应该对其他的很好。我想你会有些困惑。 该值是从一系列点计算的,因此您不必为两列中的每个

我对Pyspark是相当陌生的。我有一个数据框,我想创建一个第三列,其中RMSE的计算介于
col1
col2
之间。我正在使用一个用户定义的lambda函数来进行RMSE计算,但是不断得到这个错误
AttributeError:'int'对象没有属性'mean'

我最好如何着手解决这个问题?
我还想找到RMSE/平均值,平均绝对误差,平均绝对误差/平均值,中间绝对误差和中间百分比误差,但一旦我知道如何计算一个,我应该对其他的很好。

我想你会有些困惑。 该值是从一系列点计算的,因此您不必为两列中的每个值计算该值。 我认为您必须使用每列中的所有值来计算RMSE

这可能会起作用:

pow = udf(lambda x: x**2)
rmse = (sum(pow(old_df['col1'] - old_df['col2']))/len(old_df))**.5
print(rmse)

我觉得比你有些困惑。 该值是从一系列点计算的,因此您不必为两列中的每个值计算该值。 我认为您必须使用每列中的所有值来计算RMSE

这可能会起作用:

pow = udf(lambda x: x**2)
rmse = (sum(pow(old_df['col1'] - old_df['col2']))/len(old_df))**.5
print(rmse)

在这种情况下,我认为您不需要
udf
。我认为只使用
pyspark.sql.functions
是可能的

我可以向您推荐以下未经测试的选项

import pyspark.sql.函数作为psf
rmse=带有列(“squarederror”,
psf.pow(psf.col(“col1”)-psf.col(“col2”),
psf.lit(2)
))
.agg(psf.avg(psf.col(“squarederror”)).alias(“mse”))
.带列(“rmse”,psf.sqrt(psf.col(“mse”))
rmse.collect()

使用相同的逻辑,您可以获得其他性能统计数据

在这种情况下,我认为您不需要
udf
。我认为只使用
pyspark.sql.functions
是可能的

我可以向您推荐以下未经测试的选项

import pyspark.sql.函数作为psf
rmse=带有列(“squarederror”,
psf.pow(psf.col(“col1”)-psf.col(“col2”),
psf.lit(2)
))
.agg(psf.avg(psf.col(“squarederror”)).alias(“mse”))
.带列(“rmse”,psf.sqrt(psf.col(“mse”))
rmse.collect()

使用相同的逻辑,您可以获得其他性能统计数据

但我如何使用groupby实现这一点?假设我想像这样计算一年中每个月的RMSE
df_month=my_df.groupby('month').agg(RMSE(my_df,'col1','col2'))
我如何使用groupby?假设我想像这样计算一年中每个月的RMSE
df_month=my_df.groupby('month').agg(RMSE(my_df,'col1','col2'))
我如何使用groupby?假设我想计算一年中每个月的RMSE,就像这样
df_month=my_df.groupby('month').agg(RMSE(my_df,'col1','col2'))
我给了你答案。为了帮助用户找到这个问题的最合适答案,您应该接受其中一个答案(来自@Cristian Contrera或我的答案,取决于最让您满意的答案),但我如何使用groupby?假设我想计算一年中每个月的RMSE,就像这样
df_month=my_df.groupby('month').agg(RMSE(my_df,'col1','col2'))
我给了你答案。为了帮助用户找到这个问题最合适的答案,您应该接受其中一个答案(来自@Cristian Contrera或我的答案,取决于您最满意的答案)