使用JEP将数据帧从scala传递到python

用户

以下是我要做的:

  1. 我把数据读入scala
  2. 提取少数列
  3. 使用JEP将创建的数据帧传递给Python脚本
  4. Python脚本将dataframe转换为pandas执行一些操作并返回

但是,我不知道如何将数据帧传递给python脚本。 下面是python脚本(这只是示例脚本,而不是实际脚本):

import findspark
findspark.init()
import pandas as pd
#from pyspark.sql import types.*
from pyspark.sql import DataFrame as dataframe

def tes(df: dataframe):
    df = df.toPandas()
    df['concatenate'] = df['country'] + df['datasourceProvidedCountry']
    return dataframe(df)

它不断失败,错误如下:

^{pr2}$
spark-shell --conf spark.driver.extraLibraryPath=:/usr/local/lib64/python3.6/site-packages/jep:/usr/local/lib/python3.6/site-packages/py4j/ --jars /home/hadoop/jep-3.8.2.jar

有谁能告诉我如何使用Jep将数据帧从scala传递到pyspark(如果这是重复的,请指出正确的线程,因为我找不到一个)?在


已被浏览了4923次
更新日期: 2020-10-22 23:01:51
1 个回答
fefe Tyson

我也有同样的要求,也试过用杰普。不幸的是,Jep不适用于这个用例。在

找不到py4j.protocol是由Jep ClassEnquirer引起的,当python和jave都有同名的库时,Jep会考虑java库。您可以考虑从py4j包中排除py4j或者从py4j包中排除定制的py4j包

您还需要更新Jep构造函数,将usesub解释器值设置为false并重新构建它。在

public Jep(JepConfig config) throws JepException {
    this(config, false);
}

现在应该解决这个错误。但是,传递给python函数的对象是包含java引用的PyObject,它不是pyspark dataframe对象,因此它没有toPandas()函数。在

另一种方法可能是使用gRPC或Apache thrift,您可以查看文档以了解更多详细信息。在

评论 - 2020年9月22日 13:38

最新Python问答

推荐Python问答