python - 如何 : Pyspark dataframe persist usage and reading-back

标签 python dataframe caching pyspark persist

我对 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()
    

  • 一旦我这样做了,我应该如何回读?df_AA.unpersist() ? sqlContext.read.some_thing(df_AA) ?

  • 我对此很陌生,所以请尽量解释清楚。
    我在本地机器(8GB 内存)上运行,使用 jupyter-notebooks(anaconda); Windows 7的; java 8; python 3.7.1; pyspark v2.4.3

    最佳答案

    Spark 是惰性评估框架,因此 都没有转换 例如:调用 join 直到你调用一个 Action 。

    所以继续你所做的

    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()
    

    有多个持久选项可用,因此选择 MEMORY_AND_DISK 会将内存中无法处理的数据溢出到 DISK 中。

    此外,GC 错误可能是为 Spark 应用程序运行提供的驱动程序内存较少的结果。

    关于python - 如何 : Pyspark dataframe persist usage and reading-back,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58396618/

    相关文章:

    python - 装饰器如何标记一个函数?

    python - 检测 python 字符串的开头

    r - 将值从特定行更改为 R 中的数据框中

    PHP 缓存 - 保存在数据库中还是创建文件更快?

    python - 如何使用 Python 创建 Mac OS X 应用程序?

    python - 可以让 virtualenvs 回退到用户包而不是系统包吗?

    dataframe - 无法删除列(pyspark/databricks)

    arrays - 将 pandas 数据框转换为二维数组

    php - 如何在 PHP 中使用 opcache_compile_file()?

    php - mysql 存储旧数据