我有查询cassandra表和选择的curent_time,如下所示:
Dataset getTime = spark.sql("select current_time from trafficdata where current_time between "+ time1 +" and "+ time2 );
getTime.show();
List<Rows> list = getTime.collectAsList();
我想将此List<Rows>
转换为List<Long>
。有谁知道怎么做?
答案 0 :(得分:4)
您无法将List<Row>
投射到List<Long>
,但您可以转换它。
有一件事:Dataset.collectAsList
会返回List<T>
,而Dataset<Row>
则会List<Row>
,而不是List<Rows>
- 可能会错字。
你可以这样做:
List<Long> longs = new ArrayList<>();
for(Row row : list) {
longs.add(row.getLong(0));
}
Java 8 Stream选项:
List<Long> longs = list.stream().map(row -> row.getLong(0)).collect(Collectors.toList());
答案 1 :(得分:1)
您的描述中有一些事情尚不清楚,但我会假设您没有运行java 8,并且current_time是Datetime类型。 这样:
ArrayList<Long> newlist = new ArrayList();
for(Datetime d : list) {
newlist.add(d.getMillis());
}
return newlist;
答案 2 :(得分:1)
您知道如何从long
中提取Rows
值吗?如果是,您可以使用类似
final List<Long> timeList = getTime.collectAsList()
.stream()
.map(r -> getLongValue())
.collect(Collectors.toList());
假设您将getLongValue
函数替换为实际函数。
答案 3 :(得分:0)
您无法做到这一点,因为List<Rows>
和List<Long>
之间没有继承。
您必须阅读一点Generics Inheritance