在Pyspark DataFrame中选择特定的列以提高性能



与从Hive导入的Spark DataFrames一起工作,有时我会得到几列,我不需要。假设我不想用

过滤它们
df = SqlContext.sql('select cols from mytable')

我正在用

导入整个表格
df = SqlContext.table(mytable)

做一个select,随后的cache改善了性能/降低内存使用情况,例如

df = df.select('col_1', 'col_2', 'col_3')
df.cache()
df.count()

还是只是浪费时间?我将在df上进行很多操作和数据操作,例如avgwithColumn等。

imo事先过滤它们是有意义的:

df = SqlContext.sql('select col_1, col_2, col_3 from mytable')

这样您就不会浪费资源...

如果您不能这样做,那么您可以像这样做...

这肯定是一个好练习,但是除非您尝试通过Python RDD或做类似的操作,否则不太可能导致性能提升。如果不需要某些列来计算输出优化器,则应自动推断投影并在执行计划中尽早推动这些投影。

还值得注意的是,在大多数情况下,在df.cache()之后使用df.count()将是无用的(如果不是总是)。通常,count由优化器重写为

SELECT SUM(1) FROM table

因此,源通常要求的是:

SELECT 1 FROM table

长话短说

相关内容

  • 没有找到相关文章

最新更新