java - 在py4j中将Java对象转换为python
问题描述
我有一个 spark Scala 库,我正在它上面构建一个 python 包装器。我的图书馆的一类提供以下方法
package com.example
class F {
def transform(df: DataFrame): DataFrame
}
我正在以下列方式使用 py4j 为F
def F():
return SparkContext.getOrCreate()._jvm.com.example.F()
这允许我调用该方法transform
问题是python Dataframe 对象与Java Dataframe 对象明显不同。为此,我需要一种将 python df 转换为 java 的方法,为此我使用 py4j 文档中的以下代码
class DataframeConverter(object):
def can_convert(self, object):
from pyspark.sql.dataframe import DataFrame
return isinstance(object, DataFrame)
def convert(self, object, gateway_client):
from pyspark.ml.common import _py2java
return _py2java(SparkContext.getOrCreate(), object)
protocol.register_input_converter(DataframeConverter())
我的问题是,现在我想做相反的事情:从中获取一个 java 数据帧transform
并继续在 python 中使用它。我尝试使用protocol.register_output_converter
但找不到任何有用的示例,除了处理 java 集合的代码。
我怎样才能做到这一点?一个明显的解决方案是创建一个 python 类F
,它定义了 java 中存在的所有方法F
,将所有 python 调用转发到 jvm,取回结果并相应地转换它。这种方法有效,但它意味着我必须重新定义所有方法,F
从而生成代码重复和更多的维护
解决方案
推荐阅读
- laravel - ajax 成功后 owl-carousel css 和 js 文件不能应用于我的代码
- git - 有没有办法制作不尝试合并的大型 git 对象二进制文件?
- r - 在R中添加向量的前k个分量
- r - As.Date 应用于列时返回错误
- android - 如何将字符串数组转换为房间实体对象,即 kolin 中的 DAO?
- postgresql - psql:错误:无法连接到服务器:致命:连接到 dockerized postgres 映像时用户的密码验证失败
- text - 带有空格的大写文本。这是什么文本格式?
- c# - 如何处理 OpenGLView 的手机旋转
- docker - 如何在 digitalocean k8s 集群中提取作为 github 包托管的图像?错误:无法提取图像 .. 没有基本的身份验证凭据
- android - 推广封闭测试轨道时,Google Play 会自动发布到生产环境吗?