问题标签 [py4j]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Py4Java:ImportError:为 Apache Spark 运行 Python shell 时没有名为 numpy 的模块
我正在尝试关注此Apache Spark 演讲中的实时编码
这是我的 IPython 笔记本,直到我遇到错误:
所以安装了numpy:
然而,当我运行model = KMeans.train(data, k=5)
依赖于的命令时,Spark 使用numpy
的Py4Java
库会引发此错误。如何告诉py4j/protocol.py
Spark 文件夹中的这个 Python 脚本从我现有的 numpy 安装中导入./anaconda/lib/python2.7/site-packages
?
python - 当产生一个新进程时,导入会发生什么?
生成新进程时,导入的模块变量会发生什么?
IE
在哪里:
foobar 正在访问在 someOtherModule 开始时声明的内容:
someOtherModule.py:
具体来说,我有一个模块(称为 Y),它在顶部初始化了一个 py4j 网关,在任何函数之外。在模块 X 中,我一次加载多个文件,加载后对数据进行排序的函数使用 Y 中的函数,该函数又使用网关。
这个设计是pythonic吗?我应该在每个新进程生成后导入我的 Y 模块吗?或者有没有更好的方法来做到这一点?
python - Python -> Py4j -> Spark -> Cassandra
我想在只有四行的测试 Cassandra 表上测试一个简单的 Spark 行计数作业,以验证一切正常。
我可以通过 Java 快速完成这项工作:
现在,我想让同样的东西在 Python 中工作。Spark 发行版附带一组未捆绑的 PySpark 源代码,用于从 Python 使用 Spark。它使用一个名为 py4j 的库来启动 Java 服务器并通过 TCP 网关编组 Java 命令。我直接使用该网关来使其正常工作。
我通过 --driver-class-path 选项为 Java SparkSubmit 主机指定以下额外的 jar:
这是执行行数测试的核心 Python 代码:
在最后一行,我收到以下错误:
显然,存在一些配置或设置问题。我不确定如何合理地调试或调查或我可以尝试什么。有更多 Cassandra/Python/Spark 专业知识的人可以提供一些建议吗?谢谢!
编辑:一位同事设置了一个 spark-defaults.conf 文件,该文件是其根目录。我不完全理解为什么这会导致 Python 而不是 Java 的问题,但这没关系。我不希望该 conf 文件并通过问题解决它。
python - Pyspark py4j PickleException:“构造 ClassDict 的预期参数为零”
这个问题是针对熟悉 py4j 的人 - 并且可以帮助解决酸洗错误。我正在尝试向 pyspark PythonMLLibAPI 添加一个方法,该方法接受命名元组的 RDD,执行一些工作,并以 RDD 的形式返回结果。
该方法是在 PYthonMLLibAPI.trainALSModel() 方法之后建模的,其类似的现有相关部分是:
用于对新代码建模的现有 python Rating 类是:
这是尝试所以这里是相关的类:
新的python 类 pyspark.mllib.clustering.MatrixEntry:
PythonMLLibAPI 中的新方法foobarRDD:
现在让我们尝试一下:
结果的相关部分:
这表明输入 rdd 是“整体”。然而酸洗不开心:
下面是 python 调用堆栈跟踪的视觉效果:
apache-spark - 使用 Py4J 调用采用 JavaSparkContext 并返回 JavaRDD 的方法
我正在寻找一些帮助或示例代码来说明 pyspark 在 spark 本身之外调用用户编写的 Java 代码,该代码从 Python 获取 spark 上下文,然后返回用 Java 构建的 RDD。
为了完整起见,我使用的是 Py4J 0.81、Java 8、Python 2.7 和 spark 1.3.1
这是我用于 Python 一半的内容:
Java部分是:
在 Python 端运行产生:
Java端报告:
问题似乎是我没有正确地将JavaSparkContext
Python 传递给 Java。当我使用 from python 时,也会发生JavaRDD
同样的失败。null
sc._scj.sc()
从 Python 调用使用 spark 的用户定义的 Java 代码的正确方法是什么?
ipython - Zeppelin:构造函数 org.apache.spark.api.python.PythonRDD 不存在
IPython 笔记本
按照文档(PYSPARK_DRIVER_PYTHON=ipython PYSPARK_DRIVER_PYTHON_OPTS="notebook" ./bin/pyspark
)开始,然后填写:
输出:sc.textFile(filename).count() = 500
Apache Zeppelin 笔记本
输出:
(<class 'py4j.protocol.Py4JError'>, Py4JError(u'An error occurred while calling None.org.apache.spark.api.python.PythonRDD. Trace:\npy4j.Py4JException: Constructor org.apache.spark.api.python.PythonRDD([class org.apache.spark.rdd.MapPartitionsRDD, class [B, class java.util.HashMap, class java.util.ArrayList, class java.lang.Boolean, class java.lang.String, class java.lang.String, class java.util.ArrayList, class org.apache.spark.Accumulator]) does not exist\n\tat py4j.reflection.ReflectionEngine.getConstructor(ReflectionEngine.java:184)\n\tat py4j.reflection.ReflectionEngine.getConstructor(ReflectionEngine.java:202)\n\tat py4j.Gateway.invoke(Gateway.java:213)\n\tat py4j.commands.ConstructorCommand.invokeConstructor(ConstructorCommand.java:79)\n\tat py4j.commands.ConstructorCommand.execute(ConstructorCommand.java:68)\n\tat py4j.GatewayConnection.run(GatewayConnection.java:207)\n\tat java.lang.Thread.run(Thread.java:745)\n\n',), <traceback object at 0x7f3f79e24440>)
python - Py4JJavaError:由于 Windows 上 Spark 的阶段失败,作业中止
我已经从 git ( branch-1.4
) 构建了最新的 spark,但是在执行文件 IO 时出现错误:
错误
顺便说一句:所有正常的东西都可以正常parallelize
工作。
python - PySpark 会话中缺少 java.util.HashMap
我在 Windows 7 x64 上使用Apache Spark 1.4.0,在 IPython 3.2.0 中使用 Java 1.8.0_45 x64 和 Python 2.7.10 x86
我正在尝试在 IPython 笔记本中编写一个基于DataFrame的程序,该笔记本读取和写入 SQL Server 数据库。
到目前为止,我可以从数据库中读取数据
并将数据转换为熊猫并做任何我想做的事情。(这有点麻烦,但是在将微软的 sqljdbc42.jar 添加到 spark-defaults.conf 中的 spark.driver.extraClassPath 后它可以工作)
当我使用DataFrameWriter API将数据写回 SQL Server 时,会出现当前问题:
</p>
java.util.HashMap
问题似乎是 py4j在将我的 connectionProperties 字典转换为 JVM 对象时找不到 Java类。将我的 rt.jar(带路径)添加到 spark.driver.extraClassPath 并不能解决问题。从写入命令中删除字典可以避免此错误,但写入失败当然是由于缺少驱动程序和身份验证。
编辑:o49.mode
错误的一部分从运行更改为运行。
python - 带有泛型的 PY4J
使用以下类定义:
PY4J 将抛出以下错误:
如果您尝试实例化:
我确实在代码中的其他地方使用反射来搜索默认构造函数,但它的签名为(java.lang.Object, scala.reflection.ClassTag)
. 我不认为 PY4J 试图正确找到它。我知道,它大量使用反射,但也许它没有为这样的用例做好准备。
或者是否有任何解决方法可以成功实例化这样的泛型类?
java - 连接到由 Python 脚本生成的 JVM 以进行调试
我有一个 Python 代码,我使用 IntelliJ 运行它。Python 代码将执行一个java
命令,该命令最终会生成一个 JVM。Python 和 JVM 使用 Py4J 和自定义套接字进行通信。如何使用 IntelliJ 连接到 JVM 以进行调试?