演员表 在<Row> <T> java 中列表到列表



我从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

最新更新