【问题标题】:Pass a pySpark script in Livy Session statement在 Livy Session 语句中传递 pySpark 脚本
【发布时间】:2020-08-31 14:01:17
【问题描述】:

我了解 livy 会话语句 会像下面的示例一样接收代码语句。

data = {
 'code': textwrap.dedent("""
import random
NUM_SAMPLES = 100000
def sample(p):
  x, y = random.random(), random.random()
  return 1 if x*x + y*y < 1 else 0

count = sc.parallelize(xrange(0, NUM_SAMPLES)).map(sample).reduce(lambda a, b: a + b)
print "Pi is roughly %f" % (4.0 * count / NUM_SAMPLES)
""")
}

r = requests.post(statements_url, data=json.dumps(data), headers=headers)

但是有没有办法可以提供 pyspark 文件,可能是这样的:

data = {
 'pySparkFile': file_name.py
}

我知道 livy batch 提供了这个功能,但我想要一个交互式会话,用户可以一个接一个地传递多个脚本,我们也可以调用其他脚本的变量,就像在交互式 pySpark 会话中一样。

【问题讨论】:

    标签: python python-3.x python-2.7 pyspark livy


    【解决方案1】:

    我不确定这是否能回答您的问题,但我设法使用 cURL 在 EMR 上创建了一个 Spark 会话,如下所示:

    $ curl -H "Content-Type: application/json" -X POST -d '{"kind":"pyspark", "conf": {"spark.yarn.dist.pyFiles": "s3://bucket-name/test.py"}}' http://ec2-3-87-28-125.compute-1.amazonaws.com:8998/sessions
    {"id":0,"name":null,"appId":null,"owner":null,"proxyUser":null,"state":"starting","kind":"pyspark","appInfo":{"driverLogUrl":null,"sparkUiUrl":null},"log":["stdout: ","\nstderr: ","\nYARN Diagnostics: "]}
    

    我检查了/mnt/var/log/livy/livy-livy-server.out,发现这行表明会话已成功创建:

    20/08/31 18:02:25 INFO InteractiveSession: Interactive session 0 created [appid: application_1598896609416_0002, owner: null, proxyUser: None, state: idle, kind: pyspark, info: {driverLogUrl=http://ip-172-31-85-247.ec2.internal:8042/node/containerlogs/container_1598896609416_0002_01_000001/livy, sparkUiUrl=http://ip-172-31-95-182.ec2.internal:20888/proxy/application_1598896609416_0002/}]
    

    【讨论】:

    • 我很好奇这是否能回答您的问题。如果有帮助,请随时投票或接受答案
    猜你喜欢
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-27
    • 1970-01-01
    • 2018-12-11
    • 1970-01-01
    • 1970-01-01
    • 2012-04-24
    相关资源
    最近更新 更多