Где хранится искра для сохранения? - PullRequest
0 голосов
/ 08 ноября 2018

Я пытаюсь понять, в каком состоянии Набор данных # сохраняется мутирует в искре. Однако я изначально думал, что должен использовать возвращаемое значение для следующего действия; Похоже, что это ссылка на тот же экземпляр, а состояние фактически видоизменяется в том же Dataset.

Означает ли это, что искра фактически изменяет состояние набора данных? Тем не менее, означает ли это, что набор данных не является чисто функциональным в том смысле, что он содержит изменяемое состояние? Или это как-то связано с сессией? И если так, снова; функционально это означает, что набор данных все еще содержит изменяемое состояние, даже если это по доверенности.

scala> var x = sc.parallelize(List(1, 2, 3)).toDS
x: org.apache.spark.sql.Dataset[Int] = [value: int]

scala> x.explain()
== Physical Plan ==
*(1) SerializeFromObject [input[0, int, false] AS value#25]
+- Scan ExternalRDDScan[obj#24]

scala> var y = x.persist();
y: org.apache.spark.sql.Dataset[Int] = [value: int]

scala> y.explain();
== Physical Plan ==
*(1) InMemoryTableScan [value#25]
   +- InMemoryRelation [value#25], true, 10000, StorageLevel(disk, memory, deserialized, 1 replicas)
         +- *(1) SerializeFromObject [input[0, int, false] AS value#25]
            +- Scan ExternalRDDScan[obj#24]

scala> x.explain();
== Physical Plan ==
*(1) InMemoryTableScan [value#25]
   +- InMemoryRelation [value#25], true, 10000, StorageLevel(disk, memory, deserialized, 1 replicas)
         +- *(1) SerializeFromObject [input[0, int, false] AS value#25]
            +- Scan ExternalRDDScan[obj#24]

scala> y.unpersist();
res6: org.apache.spark.sql.Dataset[Int] = [value: int]

scala> x.explain();
== Physical Plan ==
*(1) SerializeFromObject [input[0, int, false] AS value#25]
+- Scan ExternalRDDScan[obj#24]

scala> y.explain();
== Physical Plan ==
*(1) SerializeFromObject [input[0, int, false] AS value#25]
+- Scan ExternalRDDScan[obj#24]

1 Ответ

0 голосов
/ 08 ноября 2018

Означает ли это, что искра фактически изменяет состояние набора данных? Тем не менее, означает ли это, что набор данных не является чисто функциональным в том смысле, что он содержит изменяемое состояние?

нет

Нет

Или это как-то связано с сеансом?

Да. В частности, он использует сеанс SharedState и его CacheManager.

функционально это означает, что набор данных все еще содержит изменяемое состояние, даже если это по доверенности.

Во что бы то ни стало. Неизменность в Spark - это прагматичное решение, а не догматическое, и такое поведение является скорее правилом, чем исключением.

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