使用Akka流如何从两个流形成复合案例类对象?

时间:2016-12-03 23:02:44

标签: scala csv akka akka-stream

以下是我的案例类:

case class User(id: String, location: Option[Location] = None, age: Option[String] = None) {

  override def toString: String = s"User: $id from ${location.toString} age of $age"
}

case class UserBookRating(user: User, bookISBN: String, rating: String)

如您所见,UserBookRating取决于用户

我正在从两个单独的csv文件中传输数据:Users.csv和BookRatings.csv

每个文件的示例行:

  

id,location,age

     

“10”;“芝加哥,伊利诺伊州,美国”;“26”

  

id,isbn,rating

     

“10”; “10240528340”, “5”

我正在使用带有GraphDSL的Akka流,我有两个来自每个文件的源。我的问题是如何从两个流中获取数据以形成BookRatings对象,因为它依赖于User。现在我有两个独立的流,它们构成来自Users.csv的User对象和另一个形成BookRating对象的流,但只有User的id字段被填充为BookRating对象,因为这是我从BookRatings.csv文件中知道的唯一信息。我怎样才能组合来自流的数据,以便形成BookRating对象?

1 个答案:

答案 0 :(得分:0)

在图表中创建ZipWith阶段。在ZipWith的构造函数中,传入一个组合函数,该函数将转换两个csv流的输出的元组并输出BookRating流。