completion time | unixtimestamp | user|
0.07 |1529094938000 |user3|
0.16 |1529094944000 |user2|
0.27 |1529094947000 |user1|
0.08 |1529094950000 |user2|
0.24 |1529094953000 |user1|
0.10 |1529094956000 |user1|
0.64 |1529094959000 |user3|
0.13 |1529094962000 |user3|
0.67 |1529094965000 |user1|
我想要每个用户的最小时间戳。我们如何使用Sparksql做到这一点?
假设上表在一个数据框中。
答案 0 :(得分:0)
如果不是偶然,我们将首先将时间戳字段转换为整数类型。
val new_dataframe = dataframe.select($"unixtimestamp".cast(IntegerType).as("unixtimestamp"))
1)如果不使用SparkContext对象,则在spark中创建sqlContext
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
2)将此数据帧注册为表
new_dataframe.registerTempTable("user_timestamp_data")
3)现在,使用先前创建的sqlContext,我们可以查询为
val result =
sqlContext.sql("SELECT q.user,ROUND(UNIX_TIMESTAMP(q.min)*1000) as
MinimumUnixTimeStamp
FROM (
select user, MIN(FROM_UNIXTIME(unixtimestamp/1000) min
FROM user_timestamp_data
GROUP BY user
ORDER BY user ASC) AS q ")
这应该为您提供用户及其相应的最小时间戳值
答案 1 :(得分:0)
使用groupBy
和agg
:
val df2 = df.groupBy("user").agg(min(col("unixtimestamp")))