如何使用Akka将流动数据写入单独的文本文件

时间:2018-11-06 16:59:50

标签: scala akka

我发现了相对类似的问题,但仍然找不到我需要的解决方案。

长话短说,我在数据流中进行了一些转换,最后得到的对象看起来像这样(String,Seq [Strings]),它表示字符串分区名称和可用的国家代码列表对于此分区。第二种选择是让它像Seq [(String,String)]具有一个元组序列(分区名称,国家/地区代码),但是无论如何我都会遇到相同的问题。

最后,我将与此国家代码关联的分区名称写入名称为“ smth_COUNTRY_CODE.txt”的文件中

问题是-我无法理解如何针对字符串序列中的每个国家/地区代码分别进行编写。

到目前为止,我有类似的东西:

case class PartitionWithCodes(name: String, codes: Seq[String])

val partitions = Await.result(queryApi.getPartitions(inputCatalogVersion, layer, AdditionalFields.All), Duration.Inf)

    val flowRdfPartition = Flow[Partition].mapAsync(parallelism)(partition => readEngine.get(partition, data => RoadAttributesPartition.parseFrom(data)))
    val flowPartitionName = Flow[RoadAttributesPartition]
      .filter(CountryCodeUtils.filterPartitionByTheCode(_, countryCodes))
CountryCodeUtils.matchCountryCodesToObject(partition))
      .map(partition => CountryCodeUtils.getPartitionsWithCodes(partition))
// at this point I will have PartitionWithCodes object

现在,我将尝试执行以下操作:

val fileFlow = Flow[PartitionWithCodes]
    .map(partition =>
      partition.codes.map {
        code => {
          val outFile = constructFilename(fileName, code, format)
          Source.single(ByteString(partition.name + separator)).runWith(FileIO.toPath(Paths.get(outFile))
            .mapMaterializedValue { f =>
              f.onComplete {
                case Success(r) if r.wasSuccessful => println(s"Read ${r.count} bytes from ${partition.name}")
                case Success(r) => println(s"Something went wrong when reading ${partition.name}: ${r.getError}")
                case Failure(NonFatal(e)) => println(s"Something went wrong when reading ${partition.name}: $e")
              }
              Keep.right
            }
          )
        }
      })


// Of course code below wouldn't work.
val source = partitions.via(flowRdfPartition).via(flowPartitionName).via(fileFlow)


  val fileSink = Sink.foreach[IOResult]{println}

  val result = source.via(fileFlow).to(fileSink)

问题是-如何针对序列中的每个国家/地区代码进行编写?我发布了fileFlow代码部分作为示例,说明了我的想法往哪个方向发展,但我可能完全错了。 我对Akka还是很陌生,不知道该怎么做。

先谢谢了。描述很模糊,但是如果需要的话,我会详细解释。

0 个答案:

没有答案