我正在尝试将DataFrame
缓存到内存中。当我在collect()
之后使用cache()
时,DataFrame
永远不会缓存在内存中。但是当我使用take(N)
时,DataFrame
会缓存在内存中。
我想知道为什么我在调用DataFrame
时无法缓存collect()
?以下是使用collect()
和&的示例。 take()
cache()行为
如您所见,在这种情况下,scala> val hc = new org.apache.spark.sql.hive.HiveContext(sc)
scala> hc.sql("select * from sparkdb.firsttable").cache()
res0: org.apache.spark.sql.DataFrame = [name: int]
scala> res0.collect()
res1: Array[org.apache.spark.sql.Row] = Array([12], [13], [14], [15])
DataFrame
未缓存。我希望在执行DataFrame
action
collect()
使用take(N)
缓存()行为
如您所见,调用 PS:以下是其他一些补充信息 收集()后的存储信息 take()后的存储信息 scala> res0.take(30)
res2: Array[org.apache.spark.sql.Row] = Array([12], [13], [14], [15])
take(N)
会将DataFrame
缓存到内存中。 scala> sc.getRDDStorageInfo
res2: Array[org.apache.spark.storage.RDDInfo] = Array()
scala> sc.getRDDStorageInfo
res3: Array[org.apache.spark.storage.RDDInfo] =
Array(RDD "HiveTableScan [name#0], (MetastoreRelation sparkdb,
firsttable, None), None
" (3) StorageLevel: StorageLevel(false, true, false, true, 1);
CachedPartitions: 1; TotalPartitions: 1; MemorySize: 256.0 B;
ExternalBlockStoreSize: 0.0 B; DiskSize: 0.0 B)