Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在py4j中将Java对象转换为python_Java_Python_Apache Spark_Pyspark_Py4j - Fatal编程技术网

在py4j中将Java对象转换为python

在py4j中将Java对象转换为python,java,python,apache-spark,pyspark,py4j,Java,Python,Apache Spark,Pyspark,Py4j,我有一个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数据帧对象显然不同于Java数据

我有一个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数据帧对象显然不同于Java数据帧对象。为此,我需要一种将python df转换为java df的方法,为此我使用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数据帧,并继续在python中使用它。我尝试使用
协议。register\u output\u converter
,但除了处理java集合的代码外,我找不到任何有用的示例


我该怎么做?一个显而易见的解决方案是创建一个python类
F
,该类定义java
F
中存在的所有方法,将所有python调用转发给jvm,获取结果并相应地进行转换。这种方法可行,但它意味着我必须重新定义
F
的所有方法,从而产生代码重复和更多的维护性

我的问题是如何自动注册这种行为,我的问题可能是如何自动注册这种行为,而不是在输入/输出中手动写入df转换