Python Pyspark:如何应用该函数来获取数据帧中的斜率?
我有这样一个spark数据框(x和y列,每个列有6个数据点)。我希望能够通过拟合一条简单的回归线来提取斜率(基本上可以看到y的趋势,增加或减少) 我想使用此函数,但在应用到dataframe时出错。应用这个包含两个数组的函数的正确方法是什么Python Pyspark:如何应用该函数来获取数据帧中的斜率?,python,numpy,pyspark,Python,Numpy,Pyspark,我有这样一个spark数据框(x和y列,每个列有6个数据点)。我希望能够通过拟合一条简单的回归线来提取斜率(基本上可以看到y的趋势,增加或减少) 我想使用此函数,但在应用到dataframe时出错。应用这个包含两个数组的函数的正确方法是什么 import numpy as np def trendline(x,y, order=1): coeffs = np.polyfit(x, y, order) slope = coeffs[-2] return float(slop
import numpy as np
def trendline(x,y, order=1):
coeffs = np.polyfit(x, y, order)
slope = coeffs[-2]
return float(slope)
#example to run
x_example=[1,2,3,4,5,6]
y_example=[3.42102562348192,4.2159323917750995,3.924587540944015,4.167182871752131,4.109192066532302,4.297804458327455 ]
slope=trendline(x_example,y_example)
print(slope)
这个函数本身的工作原理与上面的示例类似,但是我在应用到dataframe时遇到了问题,我想在dataframe中创建一个带有返回slope的新列
谢谢
我试过了,但没用
def get_slope_func(x,y, order=1):
coeffs = np.polyfit(x, y, order)
slope = coeffs[-2]
return float(slope)
get_slope = pandas_udf(get_slope_func, returnType=LongType())
df.select(get_slope(col("x"), col("y"))).show()
因此,您在
get\u slope\u func
中返回一个,在注册自定义项时,您已将返回类型设置为LongType()
这基本上是SQL
中的一个BigInt
。将返回类型设置为DoubleType()
from pyspark.sql import functions as F
from pyspark.sql.type import *
import numpy as np
def get_slope_func(x,y,order=1):
coeffs = np.polyfit(x, y, order)
slope = coeffs[-2]
return float(slope)
get_slope = F.udf(get_slope_func, returnType=DoubleType())
df.select(get_slope(F.col("x"), F.col("y")).alias("slope")).show(truncate=False)
#+----------------------+
#|slope |
#+----------------------+
#|1.2303624369449727E-7 |
#|-3.1609849970704353E-7|
#+----------------------+
您必须通过x=df['x']传递值。值
和y=df['y']。值
其中df
是您的数据帧。然后如果我使用np.polyfit(x[0],y.T)
它对我有效。试一试?@NikP我试过了,出现了错误“TypeError:只能将list(而不是float)连接到list”顺便说一句,我的代码是这样的:df_pandas=df.toPandas()x=df_pandas['x'].值y=df_pandas['y'].值np.polyfit(x[0],y.T,1)
或get_slope\u func(x,y)
在哪一行出现这个错误“TypeError:只能将列表(而不是“float”)连接到列表”?@NikP np.polyfit(x[0],y.T,1)。get_slope func行也有相同的错误,因为它只是我编写的调用polyfit的函数
from pyspark.sql import functions as F
from pyspark.sql.type import *
import numpy as np
def get_slope_func(x,y,order=1):
coeffs = np.polyfit(x, y, order)
slope = coeffs[-2]
return float(slope)
get_slope = F.udf(get_slope_func, returnType=DoubleType())
df.select(get_slope(F.col("x"), F.col("y")).alias("slope")).show(truncate=False)
#+----------------------+
#|slope |
#+----------------------+
#|1.2303624369449727E-7 |
#|-3.1609849970704353E-7|
#+----------------------+