在java中列出<rows>到List <long>

时间:2017-03-14 14:40:26

标签: java apache-spark cassandra

我有查询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>。有谁知道怎么做?

4 个答案:

答案 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