当前位置: 首页 > 知识库问答 >
问题:

如何在一个Sparkcontext中从Pyspark中的独立线程运行多个作业?

潘翰藻
2023-03-14

我在Scala和Java中几乎找不到相同的示例代码。谁能给出一个如何使用Pyspark实现这一点的例子吗?

共有1个答案

简景焕
2023-03-14

我遇到了同样的问题,所以我创建了一个很小的自包含的示例。我使用Python的线程模块创建多个线程,并同时提交多个spark作业。

请注意,默认情况下,spark将以先进先出(FIFO)运行作业:http://spark.apache.org/docs/latest/job-scheduling.html#scheduling-intern-an-application。在下面的示例中,我将其更改为公平调度

# Prereqs:
# set 
# spark.dynamicAllocation.enabled         true
# spark.shuffle.service.enabled           true
  spark.scheduler.mode                    FAIR
# in spark-defaults.conf

import threading
from pyspark import SparkContext, SparkConf

def task(sc, i):
  print sc.parallelize(range(i*10000)).count()

def run_multiple_jobs():
  conf = SparkConf().setMaster('local[*]').setAppName('appname')
  # Set scheduler to FAIR: http://spark.apache.org/docs/latest/job-scheduling.html#scheduling-within-an-application
  conf.set('spark.scheduler.mode', 'FAIR')
  sc = SparkContext(conf=conf)
  for i in range(4):
    t = threading.Thread(target=task, args=(sc, i))
    t.start()
    print 'spark task', i, 'has started'


run_multiple_jobs()

输出:

spark task 0 has started
spark task 1 has started
spark task 2 has started
spark task 3 has started
30000
0 
10000
20000
 类似资料:
  • 我现在不知道如何写一个合适的方法来测试这种行为。请不要投反对票... 我现在有一个java类负责处理和向多个数据库添加数据。每个数据库保存相同的数据,但处理方式不同(例如,使用不同的插值速率进行插值)。 所以我运行程序(点击绿色矩形),修改参数(插值率)并运行程序。所以我有两个进程运行(因为大约。这就是为什么我不想冒任何中断的风险,担心数据库被搞砸了)。 我的问题是:这个修改是否适用于已经运行的进

  • 这里我用java开发。 我有一个for循环中的线程,我想连续运行5次。不幸的是,循环在第二次运行时停止,出现了一个错误: 异常在线程"main"java.lang.IllegalThreadStateExctive在java.base/java.lang.Thread.start(Thread.java:793) 我知道这个错误是什么意思,但是我要求他在确定完成线程时恢复循环,这样就不会有任何错误

  • 我试着运行一个程序,使用线程显示带有数字的乘法、除法、加法和减法表。 但是我希望数字被乘以或相加等。由用户选择。 也就是说,程序应该在用户为每个操作选择一个数字后运行,然后显示结果。

  • 在一个android服务中,我创建了用于执行一些后台任务的线程。 我遇到一个情况,线程需要在主线程的消息队列上发布特定任务,例如。 有没有方法获取主线程的并从我的另一个线程向它发布/?

  • 问题内容: 我已经研究了很多关于Java线程的教程,但是找不到答案。 我的问题是:如何同时运行两个独立的线程? 我的情况是:我有两个任务; 保存一些数据到数据库 在移动设备上发送推送通知。 由于这两个任务是独立的,因此我想同时执行它们。 我尝试使用具有两个线程的线程池,但是问题是数据库任务很快完成,但是发送推送通知需要一些时间。 因此,当一个任务完成而另一个任务仍未完成时,它将引发异常。 我的代码

  • 问题内容: 根据我的最后一个问题,我必须为我的唯一JVM定义Multiple SparkContext。 我以另一种方式(使用Java)做到了: 之后,我创建下一个源代码: 然后在代码中: 执行代码后,我收到下一条错误消息: 数字和是行,其中两个对象都用Java代码定义。我的问题是,如果我已经使用-method ,是否可以在同一JVM上执行多个SparkContext以及如何执行? 问题答案: 您