【问题标题】:No runParagraph() using python interpreter on Apache Zeppelin在 Apache Zeppelin 上没有使用 python 解释器的 runParagraph()
【发布时间】:2018-08-13 11:22:28
【问题描述】:

我既不能使用z.z.useParagraph(),也不能使用%python,也不能使用%spark.pyspark解释器。

在一个最小的不工作示例中,可以从一个空笔记本开始并添加以下两段:

第一段:

%python
print("Hello")
z.z.runParagraph('REPLACE_ME')

第二段:

%python
print("World")

然后将REPLACE_ME 替换为第二段中的段落ID,最后运行第一段。结果将是一个异常,指出方法runParagraph() 确实存在。我得到的完整例外是:

Traceback (most recent call last):
  File "/tmp/zeppelin_python-9073316303905892812.py", line 283, in <module>
    raise Exception(traceback.format_exc())
Exception: Traceback (most recent call last):
  File "/tmp/zeppelin_python-9073316303905892812.py", line 276, in <module>
    exec(code, _zcUserQueryNameSpace)
  File "<stdin>", line 2, in <module>
  File "/zeppelin/interpreter/python/py4j-0.9.2/src/py4j/java_gateway.py", line 836, in __call__
    answer, self.gateway_client, self.target_id, self.name)
  File "/zeppelin/interpreter/python/py4j-0.9.2/src/py4j/protocol.py", line 314, in get_return_value
    format(target_id, ".", name, value))
Py4JError: An error occurred while calling t.runParagraph. Trace:
py4j.Py4JException: Method runParagraph([class java.lang.String]) does not exist
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:335)
    at py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:344)
    at py4j.Gateway.invoke(Gateway.java:279)
    at py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:133)
    at py4j.commands.CallCommand.execute(CallCommand.java:79)
    at py4j.GatewayConnection.run(GatewayConnection.java:209)
    at java.lang.Thread.run(Thread.java:748)

然而,

%python
z.z.runParagraph

报告&lt;py4j.java_gateway.JavaMember object at 0x7f7319460d90&gt;,所以我想应该以这种方式访问​​该方法。我错过了一些初始化步骤吗?如何使用 python 解释器运行其他段落?

【问题讨论】:

  • 您是否尝试过查看文档?不管他们有多可怕,他们通常都会有所帮助。
  • @MustacheMoses 是的,我有。

标签: python apache-zeppelin


【解决方案1】:

你要的方法是z.z.run(&lt;paragraph-id&gt;)

您可以检查上下文对象的类型/类以在源代码中查找它们的方法。

%spark.pyspark
print(type(z))
# <class '__main__.PyZeppelinContext'>
print(z.z.getClass())
# class org.apache.zeppelin.spark.SparkZeppelinContext

SparkZeppelinContext 扩展 BaseZeppelinContext,您可以在其中找到与 this chart 中记录的后端 API 相匹配的方法。

【讨论】:

  • 谢谢。当我有时间验证时,我会回来将此问题标记为正确。那么为什么在使用%angular 时是frontend-api,而在使用%python 时是backend-pi?你能详细说明一下吗?
  • 我与该项目无关,我只是在寻找如何执行相同任务时发现了您的问题。通过阅读文档,似乎前端 api 仅针对角度上下文实现。其他解释器仍然可以访问BaseZeppelinContext 类的方法,其中实现了后端api。
猜你喜欢
  • 2017-07-15
  • 2017-08-18
  • 2019-08-14
  • 2021-07-08
  • 2020-08-14
  • 2019-01-21
  • 2017-07-11
  • 2015-08-22
  • 2019-05-20
相关资源
最近更新 更多