我有一个大型数据集(数亿行),需要使用Spark with Databricks进行大量处理。此数据集有数十列,通常为整型、浮点型或整型数组。
我的问题是:如果我在处理数据之前删除一些不需要的列,会有什么不同吗?在内存和/或处理速度方面?
uurv41yg1#
这取决于您将如何处理此数据集。Spark足够聪明,能够计算出真正需要哪一列,但这并不总是那么容易。例如,当您使用UDF(User Defined Function,用户定义函数),它在定义了所有列的情况下对Case类进行操作时,将从源中选择所有列,因为从Spark的Angular 来看,这样的UDF是一个黑盒。
您可以通过SparkUI检查为您的作业选择了哪些列。例如,请查看这篇博客文章:https://medium.com/swlh/spark-ui-to-debug-queries-3ba43279efee
在您的计划中,您可以查找以下行:PartitionFilters:[],PushedFilters:[],ReadSchema:struct
在ReadSchema中,您将能够确定Spark读取了哪些列,以及在我们的处理中是否确实需要它们
1条答案
按热度按时间uurv41yg1#
这取决于您将如何处理此数据集。Spark足够聪明,能够计算出真正需要哪一列,但这并不总是那么容易。例如,当您使用UDF(User Defined Function,用户定义函数),它在定义了所有列的情况下对Case类进行操作时,将从源中选择所有列,因为从Spark的Angular 来看,这样的UDF是一个黑盒。
您可以通过SparkUI检查为您的作业选择了哪些列。例如,请查看这篇博客文章:https://medium.com/swlh/spark-ui-to-debug-queries-3ba43279efee
在您的计划中,您可以查找以下行:PartitionFilters:[],PushedFilters:[],ReadSchema:struct
在ReadSchema中,您将能够确定Spark读取了哪些列,以及在我们的处理中是否确实需要它们