我试图从聚合原理的角度来理解火花流。Spark DF 基于迷你批次,计算在特定时间窗口内出现的迷你批次上完成。
假设我们有数据作为-
Window_period_1[Data1, Data2, Data3]
Window_period_2[Data4, Data5, Data6]
..
然后首先对Window_period_1进行计算,然后对Window_period_2进行计算。如果我需要将新的传入数据与历史数据一起使用,比如说Window_priod_new与Window_pperid_1和Window_perid_2的数据之间的分组函数,我该怎么做?
查看相同事物的另一种方法是,假设我有一个已经创建了一些数据框的要求 -
df1,df2,df3和我需要运行一个聚合,它将涉及来自df1,df2,df3和Window_period_1,Window_period_2的数据,以及所有新的传入流数据
我该怎么做?
Spark允许您将状态存储在rdd中(带有检查点)。所以,即使在重新启动后,作业也会从检查点恢复状态并继续流式传输。
然而,我们面临着检查点的性能问题(特别是在恢复状态之后),因此值得使用一些外部源(如hbase)来实现storint状态
与group by/join相比,我对在窗口上运行聚合函数的性能特征感兴趣。在本例中,我对具有自定义帧边界或顺序的窗口函数不感兴趣,而只是作为运行聚合函数的一种方式。 请注意,我只对大小适中的数据量的批处理(非流式)性能感兴趣,因此我禁用了以下广播连接。 例如,假设我们从以下DataFrame开始: 假设我们想要计算每个名称出现的次数,然后为具有匹配名称的行提供该计数。 根据执行计划,窗口化看起来
我有一个spark工作,处理大量数据并将结果写入S3。在处理过程中,我可能有超过5000个分区。在写入S3之前,我想减少分区的数量,因为每个分区都是作为一个文件写入的。 在其他一些情况下,处理过程中可能只有50个分区。如果我想合并而不是因为性能原因重新分区,会发生什么。 从文档来看,它说只有当输出分区的数量少于输入时才应该使用coalesce,但是如果不是,它似乎不会导致错误吗?它会导致数据不正确
问题内容: 在我的猪代码中,我这样做: 我想用spark做同样的事情。但是,不幸的是,我看到我必须成对进行: 是否有联合运算符可以让我一次对多个rdds进行操作: 例如 这是一个方便的问题。 问题答案: 如果这些是RDD,则可以使用方法: 没有等效项,但这只是一个简单的问题: 如果要在RDD上大量使用和重新创建,可能是避免与准备执行计划的成本相关的问题的更好选择:
如果我想重新分区一个数据帧,如何决定需要做的分区数量?如何决定是使用重新分区还是合并?我知道合并基本上只是为了减少分区的数量。但是我们如何决定在什么情况下使用哪个呢?
我有C*列族来存储类似事件的数据。以这种方式在CQL3中创建的列族: null 提前谢谢你。
一些脚本在工作时什么也不做,当我手动运行它们时,其中一个失败了,出现了以下消息: 错误SparkUI:未能绑定SparkUI java.net.bindexception:地址已在使用:服务“SparkUI”在重试16次后失败! 所以我想知道是否有一种特定的方法来并行运行脚本?