11,189
社区成员
![](https://csdnimg.cn/release/cmsfe/public/img/topic.427195d5.png)
![](https://csdnimg.cn/release/cmsfe/public/img/me.40a70ab0.png)
![](https://csdnimg.cn/release/cmsfe/public/img/task.87b52881.png)
![](https://csdnimg.cn/release/cmsfe/public/img/share-circle.3e0b7822.png)
非计算机专业,手里有一个一直维护的Java计算库,能够完成业务计算。由于Python的生态圈强大,目前主要的数据分析和可视化代码是在Python中完成的,业务计算环节一直使用Python调用Java完成。Python调用Java的Jar库,必须通过Jpype或者JCC的形式调用,这两个都必须在使用前启动java虚拟机,然后java函数在这个虚拟机上执行。
现在的问题是,随着计算场景的复杂程度提高,Python调用Jar计算的速度已经远远够不上需求,算2个小时的场景数据需要一天的时间。现在想改进这一套计算程序,一种方式是在Java中重新修改计算函数,做成多线程形式;一种是能够找一种在Python中实现并行调用Java的方法。第一种方法比较复杂,而且我也没有找到一种好的存储大量数据的方法,第二种方法没有找到实现思路。
请问各位有没有解决的方法?
使用分布式计算框架来改进计算速度和实现并行调用Java时
from pyspark.sql import SparkSession
# 创建SparkSession
spark = SparkSession.builder \
.appName("Java Calculation") \
.master("local[*]") \
.getOrCreate()
# 创建一个并行化的数据集
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
rdd = spark.sparkContext.parallelize(data)
# 并行调用Java计算库
def call_java_function(value):
# 在这里调用Java计算库的函数,例如:
# result = java_library.compute(value)
result = value * 2 # 这里只是举例,实际应该调用Java函数
return result
# 使用map函数并行调用Java计算库
results = rdd.map(call_java_function).collect()
# 打印结果
for result in results:
print(result)
# 关闭SparkSession
spark.stop()
python如果以高并发的方式调用java程序,linux系统建议使用多进程并发,win系统多线程和多进程都可以。至于数据存储方面,数据库和文件方式存储也是手段。