同时在几列上点火

时间:2016-12-20 16:43:52

标签: apache-spark

我正在使用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;
        }
    }
});

我想在每个不同的时间计算每个用户的记录编号,每个不同的位置[“纬度”,“经度”]。

2 个答案:

答案 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(...)

这将按预期工作,无需任何额外步骤。

相关问题