为什么 20 行 PySpark 数据帧上的 .show() 这么慢?



我在Jupyter笔记本中使用PySpark。以下步骤最多需要 100 秒,这很好。

toydf = df.select("column_A").limit(20)

但是,以下show()步骤需要 2-3 分钟。它只有 20 行整数列表,每个列表包含的元素不超过 60 个。为什么需要这么长时间?

toydf.show()

df生成如下:

spark = SparkSession.builder
.config(conf=conf)
.enableHiveSupport()
.getOrCreate()
df = spark.sql("""SELECT column_A
FROM datascience.email_aac1_pid_enl_pid_1702""")

在Spark中有两个主要概念:

1:转换:每当您应用Column,drop,joins或group时,他们实际上正在评估它们,它们只会生成一个新的数据帧或RDD。

2:动作:相反,在计数,显示,显示,编写等操作的情况下,它实际上完成了转换的所有工作。 并且所有这些操作在内部调用Spark RunJob API以将所有转换作为作业运行。

在你的情况下,当你击中toydf = df.select("column_A").limit(20)没有什么是快乐的。

但是,当您使用Show()方法时,这是一个操作,因此它将从群集收集数据到您的驱动程序节点,此时它实际上评估了您的toydf = df.select("column_A").limit(20)

最新更新