Кэшированный кадр данных сбрасывается после усечения таблицы - PullRequest
0 голосов
/ 15 мая 2018

Вот шаги:

scala> val df = sql("select * from table")
df: org.apache.spark.sql.DataFrame = [num: int]

scala> df.cache
res13: df.type = [num: int]

scala> df.collect
res14: Array[org.apache.spark.sql.Row] = Array([10], [10])

scala> df
res15: org.apache.spark.sql.DataFrame = [num: int]

scala> df.show
+---+
|num|
+---+
| 10|
| 10|
+---+


scala> sql("truncate table table")
res17: org.apache.spark.sql.DataFrame = []

scala> df.show
+---+
|num|
+---+
+---+

Мой вопрос: почему дф сбрасывается? Я ожидаю, что он должен быть кэширован в памяти, а усечение не должно стирать данные.

Любая идея будет высоко оценена.

Спасибо

Ответы [ 2 ]

0 голосов
/ 15 мая 2018

Команда truncate table удаляет кэшированные данные, а затем кэширует и очищает таблицу. ЗДЕСЬ является источником truncate.Если вы перейдете по этой ссылке на исходный код для TruncateTableCommand, в нижней части класса case вы увидите следующее, как обрабатываются кэш и таблица при усечении таблицы:

// After deleting the data, invalidate the table to make sure we don't keep around a stale
// file relation in the metastore cache.
spark.sessionState.refreshTable(tableName.unquotedString)
// Also try to drop the contents of the table from the columnar cache
try {
  spark.sharedState.cacheManager.uncacheQuery(spark.table(table.identifier))
} catch {
  case NonFatal(e) =>
    log.warn(s"Exception when attempting to uncache table $tableIdentWithDB", e)
}

if (table.stats.nonEmpty) {
  // empty table after truncation
  val newStats = CatalogStatistics(sizeInBytes = 0, rowCount = Some(0))
  catalog.alterTableStats(tableName, Some(newStats))
}
Seq.empty[Row]
0 голосов
/ 15 мая 2018

Вы никогда не должны зависеть от cache для правильности.Spark cache - это оптимизация производительности, и даже при самом защитном StorageLevel (MEMORY_AND_DISK_SER_2) не гарантируется сохранение данных в случае сбоя работника, снятия с эксплуатации исполнителя или недостаточных ресурсов.

Код похож наиспользованный в вашем вопросе может работать в некоторых условиях, но не думайте, что это гарантированное или детерминированное поведение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...