我从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>?
从技术上讲,你可以,但这会在运行时引发ClassCastException
。
在这种情况下,最佳做法是使用复制构造函数。
我来自scala,但我相信Java中也有类似的方法。
一个可能的解决方案如下:
val query =spark.sql("select url,sourceip,destinationip from traffic_data").as[GroupClass]
现在查询值的类型为 Dataset[GroupClass]
,因此调用collectAsList()
方法会重新运行 List[GroupClass]
val list = query.collectAsList();
另一种解决方案(我认为您必须使用 streams
在 java 中做同样的事情(是在这样的GroupClass
中从列表中map
每个Row
:
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)
希望对你有帮助
你应该为此使用编码器
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