Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 当spark sql中的某个操作从未使用列时,它是否加载到内存中?_Apache Spark_Apache Spark Sql - Fatal编程技术网

Apache spark 当spark sql中的某个操作从未使用列时,它是否加载到内存中?

Apache spark 当spark sql中的某个操作从未使用列时,它是否加载到内存中?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,当我在一个Spark数据帧中有许多列,但只使用了其中的一些列时,Spark是否足够聪明,不会将未使用的列加载到内存中?在大多数情况下,Spark的优化器应该足够聪明,只加载所需的列(投影下推)。这对于柱状文件格式(如拼花地板)尤其强大,这意味着不需要读取整个文件 但我认为,在某些情况下,最好是做出一个显式的select语句,我认为我看到过投影下推不够好的情况,主要是在非常复杂的查询中 当然,请使用spark的df。解释这可能有助于您了解执行查询时发生的情况:。你的意思可能是这样吗?所以,我想意思

当我在一个Spark数据帧中有许多列,但只使用了其中的一些列时,Spark是否足够聪明,不会将未使用的列加载到内存中?

在大多数情况下,Spark的优化器应该足够聪明,只加载所需的列(投影下推)。这对于柱状文件格式(如拼花地板)尤其强大,这意味着不需要读取整个文件

但我认为,在某些情况下,最好是做出一个显式的
select
语句,我认为我看到过投影下推不够好的情况,主要是在非常复杂的查询中


当然,请使用spark的
df。解释

这可能有助于您了解执行查询时发生的情况:。你的意思可能是这样吗?所以,我想意思是:如果你从一个DF中写出3个col,得到10个col,那么它最初从一个数据源中只读取3个col,例如。我想你是这个意思吧。如果是这样的话,如果您对缓存的公共DF执行第二个操作,这将意味着Catalyst足够聪明,可以考虑这一点。我找不到这样的文件。JSON?根据我的经验,它将根据转换中使用的列(选择、筛选、联接、分组、窗口等)进行列修剪。但是当您打开数据源并且在调用persist之前不进行项目时,df.persist就不是这样了。正如Raphael提到的,使用df.explain和see进行项目时,还要确认df.persist影响项目查看带有缓存数据集的选项卡上的SparkUI,它们包含有关缓存的列和大小的信息。那么您验证了吗?我怀疑数据源是否需要进行列删减。@BluePhantom您应该阅读本文:可以,谢谢您的提示,但在阅读之前,您会声明,如果我对spark.read.jdbc有“自定义查询”,它将修改发送的实际语句?