如何将流式数据集转换成DStream?

3

是否有可能将流式的o.a.s.sql.Dataset转换为DStream?如果可以,如何转换?

我知道如何将其转换为RDD,但这是在流式处理的上下文中。

2个回答

6

这是不可能的。结构化流和遗留的 Spark 流(DStreams)使用完全不同的语义,彼此不兼容,因此:

  • DStream 无法转换为流式 Dataset
  • 流式 Dataset 无法转换为 DStream

0

在某些用例中,这是可能的。

这个问题实际上引出了另一个问题:

为什么有人想要进行这种转换?要解决的问题是什么?

我只能想象这种类型转换仅在将两个不同的API混合到单个流应用程序中时才需要。那么我会说这没有太多意义,因为您最好不要这样做,并在Spark模块级别进行转换,即将流应用程序从Spark Streaming迁移到Spark Structured Streaming。

Dataset是一系列Datasets的“抽象”(我使用引号,因为流和批处理Dataset之间的区别是DatasetisStreaming属性)。

可以将DStream转换为流Dataset,以使后者表现为前者(保持DStream的行为并假装成为流Dataset)。

在底层,Spark Streaming(DStream)和Spark Structured Streaming(流式Dataset)的执行引擎非常相似。它们都会“生成”RDD和Dataset的微批次;而RDD可以转换为Dataset,但需要使用隐式转换toDFtoDS

因此,将DStream转换为流式Dataset看起来应该如下:

dstream.foreachRDD { rdd =>
  val df = rdd.toDF
  // this df is not streaming, but you don't really need that
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接