Pyspark用户定义的列聚合计算
我正在为Pyspark中的分类器准备输入数据。我一直在SparkSQL中使用聚合函数来提取平均值和方差等特征。它们按活动、名称和窗口进行分组。窗口的计算方法是将unix时间戳除以10000,分成10秒的时间窗口 sample=sqlContext.sqlSELECT活动、名称、窗口、avgacc_x作为avgX、varianceacc_x作为varX从数据组中按活动、名称、窗口顺序、名称、窗口 这样做的结果看起来像Pyspark用户定义的列聚合计算,pyspark,apache-spark-sql,pyspark-sql,sklearn-pandas,Pyspark,Apache Spark Sql,Pyspark Sql,Sklearn Pandas,我正在为Pyspark中的分类器准备输入数据。我一直在SparkSQL中使用聚合函数来提取平均值和方差等特征。它们按活动、名称和窗口进行分组。窗口的计算方法是将unix时间戳除以10000,分成10秒的时间窗口 sample=sqlContext.sqlSELECT活动、名称、窗口、avgacc_x作为avgX、varianceacc_x作为varX从数据组中按活动、名称、窗口顺序、名称、窗口 这样做的结果看起来像 Activity Name Window AvgX
Activity Name Window AvgX VarX
Walk accelerometer 95875 2.0 1.0
我现在想做的是计算X上每个点的平均斜率
为此,我需要时间戳、窗口和X。我已经用Python实现了逻辑,使用数组,这就是它的样子——计算每个点之间的斜率,然后得到平均斜率。理想情况下,我希望在UDAF中实现这一点,Pyspark还不支持UDAF。它看起来是这样的,假设下面的函数叫做斜率。然后在sql中,您可以将slopetimestamp,X作为avgSlopeX来执行
编辑-更改输入,使其更清晰。
所以,我要做的就是计算每个点之间的斜率,然后返回窗口中斜率的平均值。所以,当我得到每个窗口的平均值和方差时,我也想得到平均斜率
样本输入
时间戳=[14647034255441464703426534146470342755114644703428587146470342951214647034304931464703431505146470343254314647034335131464703434529]
值=[1021.311021.261021.191021.191021.11021.11021.1191021.051021.02]
i=0;
斜率=0.0;
总斜率=0.0;
而i这绝对不是UDAF的工作。@zero323您如何处理此问题?计算连续点的斜率,然后进行简单平均。但这里的输入描述相当模糊。您能否发布具有预期输出的示例数据?尤其是您是否期望窗口之间的坡度?如果没有,确定行顺序的时间戳在哪里?@zero323我已经编辑了示例输入以使其更清晰。计算连续点的斜率并获得平均值正是我想要做的,但不知道在Spark中正确的方法是什么。这似乎是一个好方法!但是,withColumn似乎忽略了slope,而只是返回值的平均值:/如果slope被注册为常规函数,它可以被使用吗?输入错误。它应该是agg条款中的斜率。