Выполнять код параллельно из одного источника данных - PullRequest
0 голосов
/ 12 июня 2019

Я написал спаркджоб, который берет данные из hdfs в формате паркета. Теперь я хочу различать исполняемый код на основе devicetype и выполнять для каждого владельца устройства. При просмотре журналов код выполняется последовательно, а не параллельно. Я пробовал разные #workers #cores количества комбинаций оперативной памяти без изменения времени выполнения.

В моей голове должно быть возможно иметь n * m параллельных выполнений, где n - количество устройств, а m - количество владельцев, поскольку данные между ними никак не связаны.

Код в целом выглядит так

df = readFromParquetHDFS    //contains data for every device and every owner

dfTypeA = df.where($"device" === "TypeA")
  df_analysis = doStuff(dfTypeA)     //analysis happens per device
  array_owner.foreach(owner => {
    df_owner = df_analysis.where($"owner" === owner)
    spark.writeToMysql(df_owner)   //writes to mysql table DeviceA_OwnerA
  })

 dfTypeB = df.where($"device" === "TypeB")
  df_analysis = doDifferentStuff(dfTypeB)
  array_owner.foreach(owner => {
    df_owner = df_analysis.where($"owner" === owner")
    spark.writeToMysql(df_owner)
  })

Возможен ли параллелизм с искрой таким способом или мне нужно начать отдельную работу для каждого устройства или даже для каждого устройства для каждого владельца.

1 Ответ

0 голосов
/ 12 июня 2019

Что вам нужно понять с помощью spark: если вы используете объекты Dataframe или RDD, данные будут распределены по вашим исполнителям, чтобы распараллелить преобразования вашего объекта.Вы должны понимать понятие разделения с искрой.Параллелизм с искрой: он должен быть в состоянии разделить большой фрейм данных в разделах, распределенных по исполнителям, что будет выполнять преобразования в этих разделах для повышения производительности обработки.

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