我是 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
如有任何帮助,我们将不胜感激。我在一台机器上运行这个。
在第一段代码中,由于只有一个 .read(),spark 将继续指向文件的原始“版本”,因此即使您在睡眠期间修改它,spark 也会继续指向文件的先前版本,在第二段代码中有 2 次读取,因此每次 Spark 都会读取文件的最后一个版本。 –