我正在使用spark streaming api来熟悉它。我正在实现一个字数统计问题,我在那里收听流并在x秒后找到累计的字数并将其输出到文本文件。因此,在使用DStream的saveAsTextFiles()函数将输出打印到文件的所有转换之后,我得到奇数输出。
我希望它能在每x秒后创建一个文本文件,并将最新结果转储到该文件中。我希望文件的名称是文件中提到的prefix-timestamp-suffix。但相反,我得到的是一个文件夹,每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>))
答案 0 :(得分:1)
确实,你的期望是错误的。
您的计算在群集(多个执行程序节点)上执行。每个节点都使用一些数据集分区。 将数据写入文件时 - 每个节点将其数据集转储到同一目录下的单独文件中。这就是部分*出现的原因。