sta*_*010 3 apache-spark apache-spark-sql
我正在使用 Apache Spark,并且有一个如下所示的数据框:
scala> df.printSchema
root
|-- id: string (nullable = true)
|-- epoch: long (nullable = true)
scala> df.show(10)
+--------------------+-------------+
| id | epoch|
+--------------------+-------------+
|6825a28d-abe5-4b9...|1533926790847|
|6825a28d-abe5-4b9...|1533926790847|
|6825a28d-abe5-4b9...|1533180241049|
|6825a28d-abe5-4b9...|1533926790847|
|6825a28d-abe5-4b9...|1532977853736|
|6825a28d-abe5-4b9...|1532531733106|
|1eb5f3a4-a68c-4af...|1535383198000|
|1eb5f3a4-a68c-4af...|1535129922000|
|1eb5f3a4-a68c-4af...|1534876240000|
|1eb5f3a4-a68c-4af...|1533840537000|
+--------------------+-------------+
only showing top 10 rows
Run Code Online (Sandbox Code Playgroud)
我想按id
字段进行分组,以将id
. 然后我想按升序时间戳对纪元进行排序,然后获取第一个和最后一个纪元。
我使用了以下查询,但first
和last
epoch 值似乎是按照它们在原始数据帧中出现的顺序获取的。我希望第一个和最后一个按升序排列。
scala> val df2 = df2.groupBy("id").
agg(first("epoch").as("first"), last("epoch").as("last"))
scala> df2.show()
+--------------------+-------------+-------------+
| id| first| last|
+--------------------+-------------+-------------+
|4f433f46-37e8-412...|1535342400000|1531281600000|
|d0cba2f9-cc04-42c...|1535537741000|1530448494000|
|6825a28d-abe5-4b9...|1533926790847|1532531733106|
|e963f265-809c-425...|1534996800000|1534996800000|
|1eb5f3a4-a68c-4af...|1535383198000|1530985221000|
|2e65a033-85ed-4e4...|1535660873000|1530494913413|
|90b94bb0-740c-42c...|1533960000000|1531108800000|
+--------------------+-------------+-------------+
Run Code Online (Sandbox Code Playgroud)
如何从按纪元升序排序的纪元列表中检索第一个和最后一个?
小智 5
first
last
当在上下文之外应用时,函数是没有意义的Window
。所取的值纯粹是任意的。
相反,你应该
如果逻辑符合基本排序规则(字符串、数组和结构体为字母数字,数字为数字),请使用min
/函数。max
强类型数据集,否则为map
-> groupByKey
->reduceGroups
或groupByKey
-> mapGroups
。
归档时间: |
|
查看次数: |
5301 次 |
最近记录: |