Я написал спаркджоб, который берет данные из 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)
})
Возможен ли параллелизм с искрой таким способом или мне нужно начать отдельную работу для каждого устройства или даже для каждого устройства для каждого владельца.