首页 > 解决方案 > Apache Livy:如何共享同一个 Spark 会话?

问题描述

考虑到 livy 的批处理模式,我已经提交了一个文件/jar,其中写入了我的 spark 逻辑。我如何与另一个人分享由一个人创建POST/batches{'id':1}火花POST/batches会话{'id':2}?这样做的原因是,我已经应用并存储在数据框中的转换我需要通过共享相同的会话在不同的任务中使用它(我可以编写然后读取结果,但我想消除该开销)

问题:

我还面临的一个问题是在执行以下操作时,如果我使用 spatk 功能sc.parallelize()spark.read.csv()在我的代码中,我会得到 sc/spark 未定义


headers = {" Content-type" : "application/json"}
data = {'file' : '<file/path> ' }
request.post( host+'/batches' , data= json.dumps(data), headers = headers }

上面有什么我遗漏的,因为当我在交互模式下执行此操作时,sc/spark 会自动初始化?

更新

data = {'kind':'pyspark'}
r = requests.post(host + '/sessions', data=json.dumps(data),headers=headers)



data = {'code':'rdd1 = sc.parallelize([1,2,3])'}

rqm = requests.post(host + '/sessions/0/statements', data=json.dumps(data),headers=headers)

pprint.pprint(rqm.json())

rsm = r = requests.get(host + '/sessions/0/statements')

pprint.pprint(rsm.json())




data = {'code':'print(rdd1.collect())'}

rqs = requests.post(host + '/sessions/0/statements', data=json.dumps(data),headers=headers)

pprint.pprint(rqs.json())

rss = requests.get(host + '/sessions/0/statements')

pprint.pprint(rss.json())

这样我就可以在交互模式下共享sessions和访问。rdd我怎样才能在batch模式下做同样的事情?

请提供一个简单的示例代码,因为我是新手,我很难理解复杂的代码。

标签: apache-spark

解决方案


请使用具有自己的 spark 上下文的 Programatic API [ https://livy.incubator.apache.org/docs/latest/programmatic-api.html][1]

您需要创建一个 LivyClient 实例并将您的应用程序代码上传到 Spark 上下文并提交。

我没有看到用于编程 livy 的 python API。所以你可能必须使用 Scala 或 Java


推荐阅读