Hive 和 PySpark 效率 - 多份工作还是一份工作?

Hive and PySpark effiency - many jobs or one job?

我对 Spark 的内部工作原理有疑问。

如果我从 Hive table 定义数据框,例如df1 = spark_session.table('db.table'); table 只读一次吗?

我的意思是,如果我从 df1 创建了 4 或 5 个新数据帧并将它们全部输出到单独的文件,是否比 运行 它们都作为不同的 spark 文件更有效?

这比下图更有效吗?它会导致 Hive 的负载减少,因为我们只读取一次数据,还是现在它是这样工作的?

比这个:

如果我从 Hive table 定义数据框,例如df1 = spark_session.table('db.table'); table 只读一次吗?

  • 你需要缓存()df1 = spark_session.table('db.table').cache()然后spark会读取table一次并在执行操作时缓存数据。

  • 如果您将 df1 输出到 4 or 5 不同的文件,那么 spark 也只会从配置单元 table 中读取数据一次,因为我们已经缓存了数据。


这比下图更有效吗?它会导致 Hive 的负载减少,因为我们只读取了一次数据,还是现在它是这样工作的?

  • 是的,在您的第一个图表中,我们正在减少 hive 上的负载,因为我们只读取一次数据。

  • 在你的第二个图表中,如果我们为每个文件编写单独的 spark 作业,这意味着我们在每个作业中读取配置单元 table。