java调用spark_spark中的并行方法调用以及传递方法中使用spark会话

本文讲述了作者在使用Spark处理大量邮件分组数据时遇到的问题,即如何并行调用`processDataAgainstEmail()`方法同时传递SparkSession。作者尝试了通过`collect().foreach()`和`parallelize()`,但发现无法在并行化过程中传递SparkSession,因为这在数据库操作中是必需的。寻求解决方案以实现方法的并行执行并保持对数据库的访问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

让我先告诉大家我对Spark很新 .

我需要在表中处理大量记录,当它通过电子邮件分组时大约是100万 . 我需要根据 individual email 和 update the database based on the logical calculation 的数据集执行多个逻辑计算

我的代码结构大致相似

Initial Data Load ...

import sparkSession.implicits._ var tableData = sparkSession.read.jdbc(,, connectionProperties).select(“email”) . where()

//Data Frame with Records with grouping on email count greater than one

var recordsGroupedBy = tableData.groupBy(“email”) . count() . withColumnRenamed(“count”,“recordcount”) . filter(“recordcount> 1”) . toDF()

现在是使用processDataAgainstEmail()方法对电子邮件进行分组后的处理

recordsGroupedBy.collect().foreach(x=>processDataAgainstEmail(x.getAs("email"),sparkSession))

在这里,我看到foreach没有并行执行 . 我需要并行调用processDataAgainstEmail(,)方法 . 但是,如果我尝试通过做并行化

嗨,我可以通过调用获得一个列表

val emailList =dataFrameWithGroupedByMultipleRecords.select("email").rdd.map(r => r(0).asInstanceOf[String]).collect().toList

var rdd = sc.parallelize(emailList )

rdd.foreach(x => processDataAgainstEmail(x.getAs("email"),sparkSession))

这不受支持,因为我在使用parallelize时无法传递sparkSession .

任何人都可以帮助我,因为在processDataAgainstEmail(,)中将执行与数据库插入和更新相关的多个操作,并且还需要执行spark数据帧和spark sql操作 .

To summerize I need to invoke parallelly processDataAgainstEmail(,) with sparksession

如果不是所有可能通过spark会话,该方法将无法在数据库上执行任何操作 . 我不确定什么是替代方式,因为电子邮件的并行性必须适用于我的方案 .

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值