Последовательная обработка в пакете Spark - PullRequest
0 голосов
/ 30 октября 2018

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

import org.apache.spark.sql.SparkSession

val spark = SparkSession
  .builder()
  .appName("Simple Dataframe Processing")
  .config("spark.some.config.option", "some-value")
  .getOrCreate()

// For implicit conversions like converting RDDs to DataFrames
import spark.implicits._

val df = spark.read.json("devices.json")

// Displays the content of the DataFrame to stdout
df.show()

// +-------------------------+
// | device-guid|   Operation|
// +----+-------+-------------
// |1234        |   Add 3    |
// |1234        |   Sub 3    |
// |1234        |   Add 2    |
// |1234        |   Sub 2    |
// |1234        |   Add 1    |
// |1234        |   Sub 1    |
// +----+-------+------------+


//I have a Database with one table with following columns
//  device-guid (primary key)   result


//I would like to take df and for each row in the df do a update operation to a single DB row, Adding or removing number as described in Operation column
//So the result I am expecting at the end of this in the DB is a single row with 

// device-guid      result
// 1234             0


df.foreach { row => 
          UpdateDB(row)  //Update the DB with the row's Operation. 
                        //Actual method not shown
    }

Допустим, я запускаю это в искровом кластере с YARN с 5 исполнителями по 2 ядра на 5 рабочих узлах. Что в Spark гарантирует, что операция UpdateDB запланирована и выполнена в последовательности строк в кадре данных, а не когда-либо запланирована и выполняется параллельно?

Т.е. я всегда хочу получить ответ 0 в столбце результатов в моей БД.

В более широком смысле вопрос заключается в том, «что гарантирует последовательную обработку операций на фрейме данных даже с несколькими исполнителями и ядрами»?

Можете ли вы указать мне документ Spark, в котором указано, что эти задачи будут обрабатываться последовательно?

Есть ли какое-либо свойство Spark, которое необходимо установить, чтобы это работало?

С уважением,

Venkat

1 Ответ

0 голосов
/ 30 октября 2018

Вопрос в более широком смысле заключается в том, «что гарантирует последовательную обработку операций на фрейме данных даже с несколькими исполнителями и ядрами»?

Ничего, за исключением того, что у него вообще нет параллелизма, либо только из-за наличия только одного раздела.

Одиночное ядро ​​может иметь аналогичный эффект, но не гарантирует определенный порядок порций.

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

...