2015-07-29 2 views
0

В настоящее время у меня есть искровое приложение, которое считывает пару файлов и формирует из них кадр данных и реализует некоторую логику в кадрах данных.Spark: Импорт данных

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

Во-первых,, я просто хотел бы проверить, что, поскольку все машины в кластере могут обращаться к файлам (что является обязательным требованием от искры), задача чтения данных из этих файлов распределяется, и ни одна машина не является обремененный им? Я искал интерфейс Spark для этого приложения, но поскольку он показывает только, какие действия были выполнены с помощью каких машин, и поскольку «sc.textFile (filePath)» не является действием, я не мог быть уверен, какие машины выполняют это чтение.

Во-вторых, с какими преимуществами/недостатками я столкнулся бы, если бы я прочитал эти данные из базы данных, например Cassandra, вместо того, чтобы просто читать в файлах?

В-третьих, в моем приложении у меня есть некоторый код, где я выполняю Collect (значение treeArr = treeDF.collect()) на dataframe получить массив, а затем у меня есть какая-то логика реализована на этих массивах. Но так как это не RDD, как Spark распространяет эту работу? Или он распространяет их вообще? Другими словами, должен ли я делать максимальное количество моей работы, преобразуя и выполняя действия над RDD, чем преобразовывать их в массивы или какую-либо другую структуру данных, а затем реализовать логику, как я бы на любом языке программирования?

Я всего лишь две недели в Spark, поэтому прошу прощения, если это глупые вопросы!

ответ

1
  1. Да, sc.textFile распространяется. Он даже имеет необязательный аргумент minPartitions.

  2. Этот вопрос слишком широк. Но короткий ответ заключается в том, что вы должны сравнить его для себя.

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