scala, избегайте дважды читать файл, используя dataframe [duplicate]

Можем ли мы повторно посетить основную причину, по которой мы хотели, чтобы наш класс вел себя как Thread? Нет никакой причины, мы просто хотели выполнить задачу, скорее всего, в асинхронном режиме, что точно означает, что выполнение задачи должно входить из нашего основного потока и основного потока, если заканчивается раньше, может или не может ждать для разветвленного пути (задачи).

Если это целая цель, то где я вижу потребность в специализированном потоке. Это может быть достигнуто путем сбора RAW-потока из пула потоков в системе и назначения его нашей задачи (может быть экземпляром нашего класса), и это все.

Итак, будем подчиняться концепции ООП и писать класс типа, который нам нужен. Есть много способов сделать что-то, делайте это правильно.

Нам нужна задача, поэтому напишите определение задачи, которое можно запустить в потоке. Поэтому используйте Runnable.

Всегда помните, что implements специально используется для придания поведения, а extends используется для передачи функции / свойства.

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

2
задан Matt Holtzman 12 August 2016 в 18:47
поделиться

1 ответ

Это происходит потому, что вы не предоставляете схему для DataFrameReader. В результате Spark должен с нетерпением отсканировать набор данных для вывода выходной схемы.

Поскольку mappedRdd не кэшируется, он будет дважды оценен:

  • один раз для вывода схемы
  • один раз, когда вы вызываете data.show

Если вы хотите запретить вам предоставлять схему для чтения (синтаксис Scala):

val schema: org.apache.spark.sql.types.StructType = ???
spark.read.schema(schema).json(mappedRdd)
5
ответ дан zero323 16 August 2018 в 01:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: