使用Dataflow将PubSub流写入云存储时出错

时间:2016-10-05 05:01:26

标签: scala google-cloud-dataflow google-cloud-pubsub apache-beam spotify-scio

使用spotify中的SCIODataflow撰写作业,按照以下两个示例e.g1e.g2撰写PubSubGCS,但以下代码

会出现以下错误

错误

Exception in thread "main" java.lang.IllegalArgumentException: Write can only be applied to a Bounded PCollection 

代码

object StreamingPubSub {
  def main(cmdlineArgs: Array[String]): Unit = {
// set up example wiring
val (opts, args) = ScioContext.parseArguments[ExampleOptions](cmdlineArgs)
val dataflowUtils = new DataflowExampleUtils(opts)
dataflowUtils.setup()

val sc = ScioContext(opts)


sc.pubsubTopic(opts.getPubsubTopic)
.timestampBy {
    _ => new Instant(System.currentTimeMillis() - (scala.math.random * RAND_RANGE).toLong)
  }
.withFixedWindows((Duration.standardHours(1)))
.groupBy(_ => Unit)
.toWindowed
.toSCollection
.saveAsTextFile(args("output"))


val result = sc.close()

// CTRL-C to cancel the streaming pipeline
    dataflowUtils.waitToFinish(result.internal)
  }
}

我可能将窗口概念与Bounded PCollection混淆,有没有办法实现这一点,或者我是否需要应用一些转换才能实现这一点,任何人都可以对此有所帮助

1 个答案:

答案 0 :(得分:3)

我相信下面的SCIO class Auction has_many :bids end class Bid belongs_to :auction end class Transaction belongs_to :bid has_one :auction, through: :bid end 使用Dataflow的saveAsTextFile转换,它只支持有界PCollections。 Dataflow尚未提供直接API来向Google Cloud Storage写入无限制的PCollection,尽管这是我们正在研究的内容。

要在某处保留无限制的PCollection,请考虑,例如,BigQuery,Datastore或Bigtable。在SCIO的API中,您可以使用例如Write