加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 使用Akka Streams读取CSV文件

发布时间:2020-12-16 09:03:37 所属栏目:安全 来源:网络整理
导读:我正在读一个csv文件.我正在使用Akka Streams执行此操作,以便我可以创建要在每一行执行的操作的图表.我已经启动并运行了以下玩具示例. def main(args: Array[String]): Unit = { implicit val system = ActorSystem("MyAkkaSystem") implicit val materializ
我正在读一个csv文件.我正在使用Akka Streams执行此操作,以便我可以创建要在每一行执行的操作的图表.我已经启动并运行了以下玩具示例.

def main(args: Array[String]): Unit = {
    implicit val system = ActorSystem("MyAkkaSystem")
    implicit val materializer = ActorMaterializer()

        val source = akka.stream.scaladsl.Source.fromIterator(Source.fromFile("a.csv").getLines)
        val sink = Sink.foreach(println)
        source.runWith(sink)
      }

两种Source类型对我来说并不容易.这是惯用的还是有更好的方法来写这个?

解决方法

实际上,akka-streams提供了直接从文件读取的功能.

FileIO.fromPath(Paths.get("a.csv"))
      .via(Framing.delimiter(ByteString("n"),256,true).map(_.utf8String))
      .runForeach(println)

这里,runForeach方法是打印行.如果您有适当的接收器来处理这些行,请使用它而不是此功能.例如,如果要将行拆分为’并打印其中的总字数:

val sink: Sink[String] = Sink.foreach(x => println(x.split(",").size))

FileIO.fromPath(Paths.get("a.csv"))
      .via(Framing.delimiter(ByteString("n"),true).map(_.utf8String))
      .to(sink)
      .run()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读