不支持的操作
有些DataFrame / Dataset的操作是Streaming DataFrames / Datasets不支持的。 其中一些如下。
,流Datasets不支持多个流聚合(即流DF上的聚合链)。
,流数据集不支持Limit 和取前N行。
,不支持流dataset/dataframe的Distinct 操作。
,只有在有聚合操作且是Complete 输出模式,流数据集才支持排序操作。
,有条件地支持流和静态数据集之间的外连接。
不支持与流数据集Full outer join
不支持与右侧的流数据集Left outer join
不支持与左侧的流数据集Right outer join
F),两个流数据集之间的任何类型的join都不支持。
此外,还有一些Dataset方法将不适用于流数据集,这些操作立即执行查询并返回结果,这在流数据集上没有意义。相反,这些功能可以通过显式启动流式查询来完成。
,Count()- 无法从流数据集返回单个计数。 可以使用ds.groupBy().count()返回一个包含运行计数的流数据集。
,foreach() - 使用ds.writeStream.foreach(...) 代替
,show() -使用console sink 代替
如果尝试任何这些操作,将看到一个AnalysisException,如“操作XYZ不支streaming DataFrames/Datasets”。虽然一些操作在未来的Spark版本中或许会得到支持,但还有一些其它的操作很难在流数据上高效的实现。例如,不支持对输入流进行排序,因为它需要跟踪流中接收到的所有数据。因此,从根本上难以有效执行。