了解 dstream.saveAsTextFiles() 行为

Understanding dstream.saveAsTextFiles() behavior

我正在使用 Spark Streaming api 以熟悉它。我正在实施字数统计问题,我在其中收听流并在 x 秒后找到累积的字数统计并将其输出到文本文件。因此,在所有转换之后,当我使用 DStream 的 saveAsTextFiles() 函数将输出打印到文件时,我得到了奇怪的输出。

我希望它每隔 x 秒创建一个文本文件,并将最新结果转储到该文件中。我希望文件的名称是文档中提到的前缀-时间戳-后缀。但相反,我得到的是一个文件夹,每隔 x 秒命名一个我希望文件命名的文件夹,并且在该文件夹内是 part-* 文件和我的结果。虽然他们是正确的,但为什么会这样呢?我的期望有什么不对吗?

对于转换和我正在使用的东西(以防万一有人好奇):

# sort the dstream for current batch
sorted_counts = counts.transform(lambda rdd: rdd.sortBy(lambda x: x[1], ascending=False))

# get the top K values of each rdd from the transformed dstream
topK = sorted_counts.transform(lambda rdd: rdd.zipWithIndex().filter(<filter with big index>).map(<remove index here>))

的确,你的期望是错误的。

你的计算是在一个集群上执行的(多个执行节点)。每个节点都与数据集的某个分区一起工作。 当您将数据写入 file/s - 每个节点将其数据集转储到同一目录下的单独文件中。 part-*就是这样出现的。