从 Hive 查询中深层复制筛选的 PySpark 数据帧



>我正在从Hive表中获取一些数据并插入到数据帧上:

df = sqlContext.table('mydb.mytable')

我正在过滤一些无用的值:

df = df[df.myfield != "BADVALUE"]

我想在数据帧上执行此操作,而不是出于代码设计原因作为select查询。我注意到,即使在我过滤了数据帧之后,似乎每次我稍后对 df 进行操作时,都会完成来自 Hive 的查询和加载操作:

df.groupBy('myfield').mean()

这将花费很长时间,与我没有过滤数据框完全相同。有没有办法对它的深层副本进行提高性能并减少内存占用?

听起来你需要缓存你的数据帧

df.cache()

Spark 被懒惰地评估。当您执行转换(例如筛选器)时,Spark实际上不会执行任何操作。在执行操作(例如显示、计数等)之前,不会进行计算。Spark不会保留任何中间(最终)结果。它仅保留创建所有数据帧所需的步骤。为了避免多个冗余步骤(例如,在表中读取,过滤掉错误值),如果执行多个操作,则需要将中间数据帧缓存到内存中。

最新更新