Mik*_*ike 1 python caching persist dataframe pyspark
我对 pyspark 很陌生,我遇到了以下错误:
Py4JJavaError: An error occurred while calling o517.showString.我读过这是由于内存不足:Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
所以,我一直在读到这种情况的转变是使用df.persist()和然后再次阅读持久化的df,所以我想知道:
for我在其中执行一些.join操作的循环,我应该.persist()在循环内部还是在循环结束时使用?例如
for col in columns:
df_AA = df_AA.join(df_B, df_AA[col] == 'some_value', 'outer').persist()
--> or <--
for col in columns:
df_AA = df_AA.join(df_B, df_AA[col] == 'some_value', 'outer')
df_AA.persist()
Run Code Online (Sandbox Code Playgroud)
df_AA.unpersist()? sqlContext.read.some_thing(df_AA)?
我对此很陌生,所以请尽量解释清楚。
我在本地机器(8GB 内存)上运行,使用 jupyter-notebooks(anaconda);Windows 7的; 爪哇 8; 蟒蛇 3.7.1; pyspark v2.4.3
小智 10
Spark 是惰性评估框架,因此,在调用action之前不会调用任何转换,例如: join 。
所以继续你所做的
from pyspark import StorageLevel
for col in columns:
df_AA = df_AA.join(df_B, df_AA[col] == 'some_value', 'outer')
df_AA.persist(StorageLevel.MEMORY_AND_DISK)
df_AA.show()
Run Code Online (Sandbox Code Playgroud)
有多个持久选项可用,因此选择MEMORY_AND_DISK会将无法在内存中处理的数据溢出到 DISK。
此外,GC 错误可能是为 Spark 应用程序运行提供的驱动程序内存较少的结果。
| 归档时间: |
|
| 查看次数: |
13208 次 |
| 最近记录: |