Pyspark 多个列表中每个元素的平均值
我有一个包含 2 列的 df:
- id
- 矢量
这是它的外观示例:
+--------------------+----------+
| vector| id|
+--------------------+----------+
|[8.32,3.22,5.34,6.5]|1046091128|
|[8.52,3.34,5.31,6.3]|1046091128|
|[8.44,3.62,5.54,6.4]|1046091128|
|[8.31,3.12,5.21,6.1]|1046091128|
+--------------------+----------+
我想要 groupBy appid
并取向量每个元素的平均值。例如,聚合列表中的第一个值将是 (8.32+8.52+8.44+8.31)/4 等等。
任何帮助表示赞赏。
I have a df with 2 columns:
- id
- vector
This is a sample of how it looks:
+--------------------+----------+
| vector| id|
+--------------------+----------+
|[8.32,3.22,5.34,6.5]|1046091128|
|[8.52,3.34,5.31,6.3]|1046091128|
|[8.44,3.62,5.54,6.4]|1046091128|
|[8.31,3.12,5.21,6.1]|1046091128|
+--------------------+----------+
I want to groupBy appid
and take the mean of each element of the vectors. So for example the first value in the aggregated list will be (8.32+8.52+8.44+8.31)/4 and so on.
Any help is appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这假设您知道数组列的长度:
This assumes that you know the length of the array column:
您可以使用 posexplode 函数,然后根据平均值聚合列。如下所示 -
输出看起来有点像:
如果需要,您可以稍后重命名列。
还可以通过按 id 和 pos 分组,然后单独按 id 分组来避免枢纽,以收集列表
结果
You can use
posexplode
function and then aggregate the column based upon average. Something like below -Output would look somewhat like :
You can rename the columns later if required.
Could also avoid pivot by grouping by id and pos and then later grouping by id alone to collect_list
Outcome