Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dataframe 如何在数据帧中跨组使用线性回归?_Dataframe_Pyspark_Apache Spark Sql_Apache Spark Mllib - Fatal编程技术网

Dataframe 如何在数据帧中跨组使用线性回归?

Dataframe 如何在数据帧中跨组使用线性回归?,dataframe,pyspark,apache-spark-sql,apache-spark-mllib,Dataframe,Pyspark,Apache Spark Sql,Apache Spark Mllib,让我们假设我的spark数据帧(DF)看起来像 id | age | earnings| health ---------------------------- 1 | 34 | 65 | 8 2 | 65 | 12 | 4 2 | 20 | 7 | 10 1 | 40 | 75 | 7 . | .. | .. | .. 我想对DF进行分组,应用一个函数(比如线性 依赖于多列的回归-本例中为两列- 在每个聚合DF上获得聚

让我们假设我的spark数据帧(DF)看起来像

id | age | earnings| health 
----------------------------
1  | 34  | 65      | 8
2  | 65  | 12      | 4
2  | 20  | 7       | 10
1  | 40  | 75      | 7
.  | ..  | ..      | ..
我想对DF进行分组,应用一个函数(比如线性 依赖于多列的回归-本例中为两列- 在每个聚合DF上获得聚合DF的数量),并获得如下输出

id | intercept| slope 
----------------------
1  |   ?      |  ? 
2  |   ?      |  ? 
从sklearn.linear\u模型导入线性回归
lr_对象=线性回归()
def线性回归(ith_DF):
#注:对于我来说,ith_DF必须包含所有
#此函数范围内的数据,以便我可以应用任何
#需要ith_DF中所有数据的函数
X=[i.i.在i_DF.select(“收益”).rdd.collect()中的i.收益]
y=[i.health for i in ith_DF.select(“health”).rdd.collect()]
lr_对象拟合(X,y)
返回lr\u object.intercept\u,lr\u object.coef\u0]
系数_收集器=[]
#以下迭代在spark中不可能作为“GroupedData”
对象不可迭代,请将其视为伪代码。
对于df.groupby(“id”)中的第i_df:
c、 m=线性回归(ith_df)
系数_收集器追加((浮点(c)、浮点(m)))
model_df=spark.createDataFrame(系数_收集器,[“截距”,“斜率])
模型_df.show()

我要做的是对主数据帧进行过滤,以创建更小的数据帧并进行处理,比如线性回归

然后,您可以并行执行线性回归(在单独的线程上使用相同的
SparkSession
,这是线程安全的),并缓存主数据帧

这会给你火花的全部力量


p、 我对Spark的这一部分的有限理解使我认为Spark MLlib中使用了一种非常类似的方法,也就是“Scala和Apache Spark的实验性TensorFlow绑定”。

我认为这可以在Spark 2.3使用pandas_UDF后实现。事实上,这里有一个关于熊猫宝宝UDF发布的拟合分组回归的例子:


这个问题似乎与之相似,唯一的区别是使用
线性回归
而不是
量化器
。这几天似乎是个很热门的话题。@JacekLaskowski谢谢你的意见。但问题是应用一个自定义聚合函数,该函数接受数据帧分组部分的两列,而不像xxxx.agg({'colA':sum}),其中sum只对一列有效。谢谢。你想在自定义聚合函数中做什么?如果我能够获取ith_df,那么我可以在每个ith_df上运行各种预测模型(特征列:x1、x2、x3、…xn-1和目标列:xn)。Ohk…谢谢。但是,当将每个数据帧连接回以形成单个数据帧时,它会影响性能。这就是为什么我想在每个数据帧上进行内联聚合。