Pyspark-使用数据框中其他两个列的RMSE创建新列

时间:2020-04-10 21:45:25

标签: python pyspark

我对Pyspark还是陌生的。我有一个数据框,我想创建一个第三列,其RMSE的计算范围为from plotly.subplots import make_subplots import plotly.graph_objects as go fig = make_subplots(rows=3, cols=1, shared_xaxes=True, vertical_spacing=0.02) fig.add_trace(go.Scatter(x=[0, 1, 2], y=[10, 11, 12]), row=3, col=1) fig.add_trace(go.Scatter(x=[2, 3, 4], y=[100, 110, 120]), row=2, col=1) fig.add_trace(go.Scatter(x=[3, 4, 5], y=[1000, 1100, 1200]), row=1, col=1) fig.update_layout(height=600, width=600, title_text="Stacked Subplots with Shared X-Axes") fig.show() col1。我正在使用用户定义的lambda函数进行RMSE计算,但始终收到此错误col2

AttributeError: 'int' object has no attribute 'mean'

如何最好地解决此问题? 我还想找到RMSE /平均值,平均绝对误差,平均绝对误差/平均值,中位数绝对误差和中位数误差,但是一旦我弄清楚如何计算一个,就应该在其他方面表现出色。

2 个答案:

答案 0 :(得分:1)

我认为比您有些困惑。 RMSE是由一连串的点计算得出的,因此您不必为两列中的每个值都计算得出。 我认为您必须使用每一列中的所有值来计算RMSE。

这可能有效:

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

答案 1 :(得分:1)

在这种情况下,我认为您不需要it.only ('should work with dynamic state change', async () => { wrapper.setProps({ defaultState: true }); await wrapper.vm.$nextTick(); // shows the true console.log( wrapper.vm.defaultState ); // should be true but i get false console.log( wrapper.vm.currentState ); }); 。我认为仅使用udf是可能的。

我可以为您提出以下未经测试的选择

pyspark.sql.functions

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