我正在探讨UDF的缺点,并遇到了scala代码,该代码显示了如何使用内置函数来提高性能。为了显示差异,作者使用了.queryExecution.executedPlan方法,它显示了计划中的推式过滤器和分区过滤器详细信息。但是我想在pyspark代码中看到相同的细节,但仍然找不到能够显示相同细节的方法。
在pyspark代码中,我使用了new_df.explain(True)方法和new_df._jdf.queryExecution()。toString()来获取详细信息,但无法在计划中获取所需的详细信息。有人可以指出我正确的方向吗?
from pyspark.sql.types import *
from pyspark.sql.functions import *
data = [("jose", 1), ("li", 2), ("liz", 3)]
source_df = spark.createDataFrame(data, ["name", "age"])
## with UDF ##
def with_greeting(x):
if x == "jose":
return True
with_greeting= udf(with_greeting,BooleanType())
new_df = source_df.where(with_greeting(source_df.age))
new_df._jdf.queryExecution().toString()
##new_df.explain(True)
##With out UDF##
new_df = source_df.filter(source_df.name=="jose")
##new_df.explain(True)
new_df._jdf.queryExecution().toString()
##new_df._jdf.executedPlan().toString()
我没有看到推送过滤器的详细信息,也没有任何地方表明它在以显示给Scala的方式读取过滤器时应用了过滤器,例如Inmemoryfileindex pushfilter = [details]?``