mysql - 从单个数据源并行运行代码

标签 mysql scala apache-spark

我编写了一个 Sparkjob,它以 Parquet 格式从 HDFS 获取数据。 现在我想根据设备类型区分执行的代码并为每个设备所有者执行。查看日志时,代码是顺序执行的,而不是并行执行的。我尝试了不同的 #workers #cores 数量的 ram 组合,但执行时间没有改变。

在我看来,应该可以有 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)
  })

是否可以通过这种方式使用 Spark 实现并行性,或者我是否需要为每个设备甚至每个所有者的每个设备启动单独的作业。

最佳答案

关于spark您必须了解的内容:如果您使用Dataframe或RDD对象,数据将分布在您的执行器上,以便并行化对象上的转换。 您必须了解 Spark 分区的概念。 Spark的并行性:它能够将一个大数据帧分成多个分区,分布在执行器上,执行器将对这些分区进行转换以提高处理性能。

关于mysql - 从单个数据源并行运行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56561828/

相关文章:

scala - 注入(inject)数据库依赖 scala 对象

forms - Play 如何为包含枚举的案例类实现隐式写入或格式

hadoop - 如何计算为 spark 应用程序分配的资源(分配的内存)?

apache-spark - 与文件路径列表相比,为什么 Spark 读取目录的速度要快得多?

mysql - 自动将用户和日期添加到记录中

sql - MySQL 自连接

mysql - 在mysql中的同一个表中插入一行后,如何从其他列的内容填充列

scala - Scala中 'HashSet'和 'Set'之间的区别?

scala - 可以通过 ISNUMERIC 函数过滤 Spark 数据帧吗?

java - MySQL:java.sql.BatchUpdateException:键 '242-243' 的重复条目 'PRIMARY'