Apache spark Spark数据帧缓存大容量

Apache spark Spark数据帧缓存大容量,apache-spark,dataframe,apache-spark-sql,rdd,Apache Spark,Dataframe,Apache Spark Sql,Rdd,我有一个spark应用程序,它有一个非常大的数据帧。我目前正在将dataframe注册为一个诱人的对象,以便可以对其执行多个查询 当我使用RDD时,我使用persist(StorageLevel.MEMORY_和_DISK()),这是一个诱人的应用程序的等价物 下面是两种可能性,我认为选项2不起作用,因为cacheTable试图在内存中缓存,而我的表太大,无法放入内存 DataFrame standardLocationRecords = inputReader.readAsDataFr

我有一个spark应用程序,它有一个非常大的数据帧。我目前正在将dataframe注册为一个诱人的对象,以便可以对其执行多个查询

当我使用RDD时,我使用persist(StorageLevel.MEMORY_和_DISK()),这是一个诱人的应用程序的等价物

下面是两种可能性,我认为选项2不起作用,因为cacheTable试图在内存中缓存,而我的表太大,无法放入内存

    DataFrame standardLocationRecords = inputReader.readAsDataFrame(sc, sqlc);

    // Option 1 //
    standardLocationRecords.persist(StorageLevel.MEMORY_AND_DISK());
    standardLocationRecords.registerTempTable("standardlocationrecords");

    // Option 2 //
    standardLocationRecords.registerTempTable("standardlocationrecords");
    sqlc.cacheTable("standardlocationrecords");
我怎样才能最好地缓存我的数据,这样我就可以对它执行多个查询,而不必不断地重新加载数据

谢谢,
Nathan

我刚刚看过Spark 1.6.1的源代码,实际上选项2就是您想要的。以下是关于缓存的评论摘录:

。。。与
RDD.cache()
不同,默认存储级别设置为
内存和磁盘
因为重新计算内存列 基础表的表示形式非常昂贵

参考:

  def cacheTable(tableName: String): Unit = {
    cacheManager.cacheQuery(table(tableName), Some(tableName))
  }

  private[sql] def cacheQuery(
      query: Queryable,
      tableName: Option[String] = None,
      storageLevel: StorageLevel = MEMORY_AND_DISK): Unit