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

时间:2017-07-10 22:07:00

标签: apache-spark hive pyspark apache-spark-sql

我在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""")

1 个答案:

答案 0 :(得分:-1)

在Spark中,有两个主要概念:

1:转换:每当您在withColumn,drop,join或groupB上应用它们时,它们实际上是在评估它们只是产生一个新的数据框或RDD。

2:操作:实际上,在进行计数,显示,显示,编写之类的操作时,它实际上完成了转换的所有工作。并且所有这些Action内部都调用Spark RunJob API以将所有转换作为Job运行。

在您的情况下,当您击中toydf = df.select("column_A").limit(20)时,没有任何障碍。

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