我正在使用Spark2.0 我有一个数据框有几列,如id,纬度,经度,时间, 我想做一个groupby并始终保持[“纬度”,“经度”],
我可以执行以下操作吗?
buttonUpdate = new Button(parent, SWT.NONE);
buttonUpdate.setText("Update");
GridData gridData = new GridData(80, 30);
buttonUpdate.setLayoutData(gridData);
buttonUpdate.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event e) {
switch (e.type) {
case SWT.Selection:
for (Control control : parent.getChildren()) {
control.dispose();
}
createPartControl(parent);
break;
}
}
});
我想在每个不同的时间计算每个用户的记录编号,每个不同的位置[“纬度”,“经度”]。
答案 0 :(得分:1)
您可以合并“纬度”和“经度”列,然后可以使用groupBy
。下面的示例是使用Scala。
val df = Seq(("1","33.33","35.35","8:00"),("2","31.33","39.35","9:00"),("1","33.33","35.35","8:00")).toDF("id","latitude","longitude","time")
df.show()
val df1 = df.withColumn("lat-long",array($"latitude",$"longitude"))
df1.show()
val df2 = df1.groupBy("id","lat-long","time").count()
df2.show()
输出如下所示。
+---+--------------+----+-----+
| id| lat-long|time|count|
+---+--------------+----+-----+
| 2|[31.33, 39.35]|9:00| 1|
| 1|[33.33, 35.35]|8:00| 2|
+---+--------------+----+-----+
答案 1 :(得分:0)
你可以使用:
df.groupBy('id', 'latitude', 'longitude','time').agg(...)
这将按预期工作,无需任何额外步骤。