首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在java中将List<Row>转换为List<T>

在java中将List<Row>转换为List<T>
EN

Stack Overflow用户
提问于 2017-05-26 22:37:22
回答 3查看 840关注 0票数 0

我从cassandra表中挑选值,并将它们存储在数据集中,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
Dataset query =spark.sql("select url,sourceip,destinationip from traffic_data");
List<Row> = query.collectAsList();

现在我有了一个POJO类GroupClass,它的变量有url,sourceip和destionationip。

代码语言:javascript
代码运行次数:0
运行
复制
Is it possible to cast this List<Row> to List<GroupClass>?
EN

回答 3

Stack Overflow用户

发布于 2017-05-26 22:47:01

从技术上讲,您可以,但这将在运行时抛出一个ClassCastException

在这种情况下,最佳实践是使用Copy Constructor

票数 0
EN

Stack Overflow用户

发布于 2017-05-26 22:54:42

我来自scala,但我相信在java中也有类似的方式。

一种可能的解决方案是:

代码语言:javascript
代码运行次数:0
运行
复制
val query =spark.sql("select url,sourceip,destinationip from traffic_data").as[GroupClass]

现在查询值的类型为Dataset[GroupClass],因此调用collectAsList()方法将返回一个ListGroupClass

代码语言:javascript
代码运行次数:0
运行
复制
val list = query.collectAsList();

另一种解决方案(我认为你必须使用streams在java中做同样的事情)是将列表中的每个Row放在一个GroupClass中,如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
val query =spark.sql("select url,sourceip,destinationip from traffic_data")
val list = query.collectAsList();
val mappedList = list.map {
  case Row(url: String,sourceip: String,destinationip: String) => 
  GroupClass(url, sourceip, destinationip)
}

我认为所有属性(url、sourceip、destinationip)都有一个String

您必须创建GroupedClass

代码语言:javascript
代码运行次数:0
运行
复制
GroupClass(url: String,sourceip: String,destinationip: String)

希望能有所帮助

票数 0
EN

Stack Overflow用户

发布于 2017-05-28 03:51:14

为此,您应该使用编码器

代码语言:javascript
代码运行次数:0
运行
复制
Dataset schools = context
.read()
.json("/schools.json")
.as(Encoders.bean(University.class));

欲了解更多信息,请点击此处https://databricks.com/blog/2016/01/04/introducing-apache-spark-datasets.html或点击此处https://jaceklaskowski.gitbooks.io/mastering-apache-spark/content/spark-sql-Encoder.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44204254

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档