长类型字段的Order by在Spark Java数据集中不起作用
我有一个数据集,下面是Employee对象中的字段长类型字段的Order by在Spark Java数据集中不起作用,java,apache-spark,apache-spark-dataset,Java,Apache Spark,Apache Spark Dataset,我有一个数据集,下面是Employee对象中的字段 class Employee {String loginSession, Long loginDateTimeMilli, String name , string empType, String location} 我必须对数据集执行以下操作 group by loginSession order by loginDateTimeMill 下面是我如何执行相同的操作 ds.orderBy(col('loginDateTim
class Employee {String loginSession, Long loginDateTimeMilli, String name , string empType, String location}
我必须对数据集执行以下操作
group by loginSession
order by loginDateTimeMill
下面是我如何执行相同的操作
ds.orderBy(col('loginDateTimeMill').asc())
.groupBy(col('loginSession'))
.agg(collect_list(struct) ...) ...
这给了我以下输出(示例)
以下是预期产出
[[loginSession, WrappedArray([name1,emptype1,location1,loginDateTimeMilli_1]
,[name1,emptype1,location1,loginDateTimeMilli_2]
,[name1,emptype1,location1,loginDateTimeMilli_3])]
不知道为什么它不起作用。我做错什么了吗?
任何帮助都将不胜感激。
我正在为spark使用JavaAPI
编辑:我正在为每个登录会话创建文件,该会话工作正常,唯一的问题是详细信息没有按顺序排序。此外,问题并不在于生成的所有文件,它只在某些情况下出现。这是意料之中的,
groupBy
将不会由于无序而保留顺序。您应该将logindamelli
打包为结构中的第一个元素,然后使用sort\u数组
。或者,使用数据集API(groupByKey
,mapGroups
)进行聚合,这取决于您下一步打算做什么,只需按会话和日期排序,并根据顺序进行分组可能更容易。@RaphaelRoth:LoginDataMemilli
是包装数组中的第一列。如果groupBy
没有保存订单,那么在orderBy
中传递列loginSession
是否会像@realponsum>所建议的那样工作?我的建议很好,这仅取决于您对结果数据所做的操作。也就是说,如果你正在收集它给司机或做其他事情。如果您想进一步了解这一点,您应该将该信息添加到问题中。@realpoint已用Edit更新@RaphaelRoth:我已经尝试过使用排序数组
,但在聚合方面也没有运气,我有很多列。
[[loginSession, WrappedArray([name1,emptype1,location1,loginDateTimeMilli_1]
,[name1,emptype1,location1,loginDateTimeMilli_2]
,[name1,emptype1,location1,loginDateTimeMilli_3])]