【发布时间】:2021-03-25 10:19:07
【问题描述】:
我正在尝试将 java 数据帧转换为 pyspark 数据帧。为此,我在 java 进程中创建一个数据框(或行的数据集)并在 java 端启动一个 py4j.GatewayServer 服务器进程。然后在 python 方面,我创建了一个 py4j.java_gateway.JavaGateway() 客户端对象并将其传递给 pyspark 的 SparkContext 构造函数,以将其链接到已经启动的 jvm 进程。但我收到了这个错误:-
File: "path_to_virtual_environment/lib/site-packages/pyspark/conf.py", line 120, in __init__
self._jconf = _jvm.SparkConf(loadDefaults)
TypeError: 'JavaPackage' object is not callable
有人可以帮忙吗? 以下是我正在使用的代码:-
Java 代码:-
import py4j.GatewayServer
public class TestJavaToPythonTransfer{
Dataset<Row> df1;
public TestJavaToPythonTransfer(){
SparkSession spark =
SparkSession.builder().appName("test1").config("spark.master","local").getOrCreate();
df1 = spark.read().json("path/to/local/json_file");
}
public Dataset<Row> getDf(){
return df1;
}
public static void main(String args[]){
GatewayServer gatewayServer = new GatewayServer(new TestJavaToPythonTransfer());
gatewayServer.start();
System.out.println("Gateway server started");
}
}
Python 代码:-
from pyspark.sql import SQLContext, DataFrame
from pyspark import SparkContext, SparkConf
from py4j.java_gateway import JavaGateway
gateway = JavaGateway()
conf = SparkConf().set('spark.io.encryption.enabled','true')
py_sc = SparkContext(gateway=gateway,conf=conf)
j_df = gateway.getDf()
py_df = DataFrame(j_df,SQLContext(py_sc))
print('print dataframe content')
print(dpy_df.collect())
运行python代码的命令:-
python path_to_python_file.py
我也试过这样做:-
$SPARK_HOME/bin/spark-submit --master local path_to_python_file.py
但是这里虽然代码没有抛出任何错误,但它没有向终端打印任何内容。我需要为此设置一些 spark conf 吗?
P.S - 如果代码中存在拼写错误或错误,请提前道歉,因为我无法直接从我公司的 IDE 中复制代码和错误堆栈。
【问题讨论】:
标签: apache-spark pyspark apache-spark-sql py4j