我从cassandra表中挑选值,并将它们存储在数据集中,如下所示:
Dataset query =spark.sql("select url,sourceip,destinationip from traffic_data");
List<Row> = query.collectAsList();
现在我有了一个POJO类GroupClass,它的变量有url,sourceip和destionationip。
Is it possible to cast this List<Row> to List<GroupClass>?
发布于 2017-05-26 14:47:01
从技术上讲,您可以,但这将在运行时抛出一个ClassCastException
。
在这种情况下,最佳实践是使用Copy Constructor。
发布于 2017-05-26 14:54:42
我来自scala,但我相信在java中也有类似的方式。
一种可能的解决方案是:
val query =spark.sql("select url,sourceip,destinationip from traffic_data").as[GroupClass]
现在查询值的类型为Dataset[GroupClass]
,因此调用collectAsList()
方法将返回一个ListGroupClass
val list = query.collectAsList();
另一种解决方案(我认为你必须使用streams
在java中做同样的事情)是将列表中的每个Row
放在一个GroupClass
中,如下所示:
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
:
GroupClass(url: String,sourceip: String,destinationip: String)
希望能有所帮助
发布于 2017-05-27 19:51:14
为此,您应该使用编码器
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
https://stackoverflow.com/questions/44204254
复制