cjuexuan / mynote

237 stars 34 forks source link

Pyspark 在一个SparkSession下如何进行多线程并发 #56

Closed yukunqi closed 6 years ago

yukunqi commented 6 years ago

楼主你好!

最近我刚开始接触和学习Spark ,然后我使用的python的接口。有个问题想请教一下,不知道是否方便?在百度上看到您的isssues被很多人关注,所以就过来请教一下。

我的问题是这样的,就是我现在有一个python的程序,我在开头使用了一个sparksession,获取一个spark实例用于后面进行一些数据库的操作。然后程序的前期从hive中读取了一些数据并注册成为了临时表,这些表在后面会被用到,后面有四个类似的步骤需要各自计算和生成数据,做一些业务操作然后插入到同一张表中。

所以想把后面四个类似的东西,用python的多线程去开启4个线程分别执行,然后把之前生成的临时表和spark实例当参数传递进去。这样可以四个任务一起跑,但是发现存在一定的问题。程序总是报错。

想请问一下要实现这样的效果,应该怎么样去实现。一个线程是只能使用一个sparksession吗?还是说每一个任务我都创建一个spark实例去执行?

具体spark里面是怎么样的一个机制来完成的,谢谢楼主!

cjuexuan commented 6 years ago

每个任务开一个spark的application会比较慢,如果多个线程共享了sparksession,其实他们也会共享sessionState和sessionCatalog,所以也会有点坑,至于python调用我没有尝试过,另外这个repo我用来做博客的,所以这个isssue我要关闭了