我试图在akka流中的保持
组合下创建以下示例:
import java.nio.file.Paths
import akka.NotUsed
import akka.actor.ActorSystem
import akka.stream.{ActorMaterializer, IOResult}
import akka.stream.scaladsl.{FileIO, Flow, Keep, Sink, Source}
import akka.util.ByteString
import scala.concurrent.Future
import scala.util.{Failure, Success}
object FileConsumer extends App {
implicit val system = ActorSystem("reactive-tweets")
implicit val materializer = ActorMaterializer()
val source: Source[Int, NotUsed] = Source(1 to 100)
val factorials = source.scan(BigInt(1))((acc, next) => acc * next)
val result: Future[IOResult] =
factorials.map(_.toString).runWith(lineSink("factorial2.txt"))
implicit val ec = system.dispatcher
result.onComplete {
case Success(v) => println(s"Fileinfo ${ v.count }")
case Failure(e) => println(e)
}
def lineSink(filename: String): Sink[String, Future[IOResult]] =
Flow[String].map(s => ByteString(s + "\n")).toMat(FileIO.toPath(Paths.get(filename)))(Keep.right)
}
akka流网站上说:
生成的蓝图是一个Sink[String, Future[IOResult]]
,这意味着它接受字符串作为其输入,当具体化时,它将创建Future[IOResult]
类型的辅助信息(当在Source或Flow上链接操作时,辅助信息的类型-称为“具体化值”-由最左侧的起点给出;因为我们想保留FileIO. toPath
接收器必须提供的东西,所以我们需要说Keep.right
)。
但是,当我想把ByteString
保留在左边时,我试过:
def lineSink2(filename: String): Sink[String, Future[ByteString]] =
Flow[String].map(s => ByteString(s + "\n")).toMat(Sink.foreach(println))(Keep.left)
但它根本不编译。
我也不明白:
由最左边的起点给出
最左边的起点是流
?
我想,我还不明白保持
的想法。
水槽的定义。具体如下:
def foreach[T](f: T ⇒ Unit): Sink[T, Future[Done]]
这意味着物质化的价值是未来[完成]
在流动的情况下,你有:
val value: Flow[String, ByteString, NotUsed] = Flow[String].map(s => ByteString(s + "\n"))
未使用其物化价值
在这种情况下:
Keep.left-未使用-来源或流量的物化价值
保持右-未来[完成]-汇的物质化价值
保持两者(未使用,未来[完成])
重要的事实是,在许多情况下,物质化的价值并不是流经流程的元素的价值,而是它的价值
我们使用的是Kafka0.10.2.1。该文档规定,即使缓冲区未满,也可以发送缓冲区- 默认情况下,即使缓冲区中有额外的未使用空间,也可以立即发送缓冲区。但是,如果要减少请求的数量,可以设置linger。ms设置为大于0的值。 然而,它还表示,即使逗留时间设置为0ms-,生产者也会尝试批量请求。 请注意,及时到达的记录通常会批处理在一起,即使存在延迟。ms=0,因此在重负荷下,无论采用何种玲珑配置
我猜这是一个教义错误(我在JIRA问题跟踪器上提交了一个问题),但万一只是用户错误,我决定在这里发布它。 使用由2个外键和一个元数据字段组成的复合主键在联接表中持久化实体集合在某些情况下会失败。代码是以这里的指令为基础的:条令文件 调试日志: 失败:当外键%1在集合中的项之间相同,并且外键%2小于任何现有外键%2时,工作单元尝试插入现有实体,但不对新实体进行操作。 > 示例:GPA“add val
我有两个分类的RDD: 在中,我看到顺序不一定像我想象的那样得到维护(的所有元素排在第一位,然后是的所有元素)。我的假设是否不正确(关于的契约),如果是,我应该使用什么将多个排序的RDD追加到单个rdd中?
问题内容: 为什么某些集合数据结构不能保持插入顺序?与保持插入顺序相比,有什么特别的事情?如果不维持订单,我们会有所收获吗? 问题答案: 性能。如果您想要原始的插入顺序,则可以使用LinkedXXX类,它们在插入顺序中维护着一个附加的链表。大多数时候,您都不在乎,因此您使用HashXXX,或者想要自然订单,因此您使用TreeXXX。在这两种情况下,您为什么都要支付链接列表的额外费用?
让事件持续发生一段时间 用法 “保持”节点可以: 保持输入的值,直到另一个“no”没有值出现 在一段时间内保持输入的值不变 让输入逐渐的变化 Your browser does not support the video tag. 案例:小台灯 功能:按下按钮后松开手,灯亮起5s后才会灭 工作原理 你可以从配置项的3种模式中任选1个: 保持直到改变:输入将会被保持,直到有另一个输入进来(例如一张伤
问题内容: 我有一些最初存储在通用Javascript对象中的数据,其ID为键: 但是,我发现浏览器在循环浏览时并不能保证特定的对象顺序,因此在上面的“ 3”将出现在“ 7”之前。我改用这样的数组格式: 现在,我可以按正确的顺序循环,但是不能进行快速查找,例如,不必循环遍历数组。 是否有结合两种方法的好方法?我宁愿避免为每种格式使用单独的对象,因为该对象非常大(数百个元素)。 问题答案: 我也遇到