删除未在计算中使用的列是否会影响spark中的性能



我有一个大型数据集(数亿行(,需要使用spark和Databricks对其进行大量处理。此数据集有数十列,通常是整数、浮点或整数数组。

我的问题是:如果在处理数据之前删除一些不需要的列,会有什么不同吗?在内存和/或处理速度方面?

这取决于您将如何处理此数据集。Spark足够聪明,可以找出真正需要的列,但并不总是那么容易。例如,当您使用UDF(用户定义函数(,它在定义了所有列的情况下操作case类时,所有列都将从源中选择,因为从Spark的角度来看,这样的UDF是一个黑框。

您可以通过SparkUI检查为您的作业选择了哪一列。例如,看看这篇博客文章:https://medium.com/swlh/spark-ui-to-debug-queries-3ba43279efee

在您的计划中,您可以查找以下行:PartitionFilters:[]、PushedFilters:[],ReadSchema:struct<id:string>

在ReadSchema中,您将能够弄清楚Spark读取的是哪一列,以及在我们处理时是否真的需要它们

最新更新