火花计数未给出正确结果

问题描述 投票:0回答:1

我是 Spark 新手,最近了解到,当调用某个操作时,它会执行所有转换。在搜索过程中,我找到了一个简单的代码来测试它,结果并不符合预期。

这是代码

from pyspark.sql import SparkSession
from os import system as ossystem
import time

spark = SparkSession.builder.master("local[4]").getOrCreate()
txtfile= spark.read.text("./temp.txt")
print(txtfile.count())

time.sleep(10)

print(txtfile.count())

sleep
执行时,我从另一个终端运行命令
echo "1\n2\n3" >> temp.txt
向文件中添加另外三行。 PySpark代码的输出如下。

2
3

它打印

3
而不是
5
。为什么这样?重新计算是否无法正常工作?如果我明确地将数据帧形成放在第二次计数之前,那么它的工作原理如下。

txtfile= spark.read.text("./temp.txt")
print(txtfile.count())

time.sleep(10)

txtfile= spark.read.text("./temp.txt")
print(txtfile.count())

输出

2
5

如有任何帮助,我们将不胜感激。我在一台机器上运行这个。

apache-spark pyspark apache-spark-sql count
1个回答
0
投票

在第一段代码中,由于只有一个 .read(),spark 将继续指向文件的原始“版本”,因此即使您在睡眠期间修改它,spark 也会继续指向文件的先前版本,在第二段代码中有 2 次读取,因此每次 Spark 都会读取文件的最后一个版本。 –

© www.soinside.com 2019 - 2024. All rights reserved.