我正在编写执行SQL到DBMS并检索数据的python模块.我正在尝试使用jdbc jar文件而不是本机DB驱动程序.我想知道如何在python中执行jar文件并从jar执行中获取输出.我想知道如何将SQL字符串传递给jar参数.这是简化的代码.任何帮助是极大的赞赏.
[java code]
public class GetDBResults {
public static void main(String[] args) {
// return sql results
for(int i=0; i<=100; i++){
// Is this the proper way to generate the output?
System.out.println(i+"/t"+i*100+1);
}
}
}
Run Code Online (Sandbox Code Playgroud)
[python代码]
subprocess.call( [ 'java','-jar','./GET_DB_DATA.jar' )
# how to get results from jar execution?
# how to pass SQL string to jar execution?
Run Code Online (Sandbox Code Playgroud) 这个问题与我之前发布的链接具有相同的意义.
由于我遇到了'DataFrame'对象共享问题,我无处可去.
我简化了示例代码.
如果有任何专业人士修改我的代码以在没有Manager.list,Manager.dict,numpy sharedmem的进程之间共享'DataFrame'对象,我将非常感谢她或他.
这是代码.
#-*- coding: UTF-8 -*-'
import pandas as pd
import numpy as np
from multiprocessing import *
import multiprocessing.sharedctypes as sharedctypes
import ctypes
def add_new_derived_column(shared_df_obj):
shared_df_obj.value['new_column']=shared_df_obj.value['A']+shared_df_obj.value['B'] / 2
print shared_df_obj.value.head()
'''
"new_column" Generated!!!
A B new_column
0 -0.545815 -0.179209 -0.635419
1 0.654273 -2.015285 -0.353370
2 0.865932 -0.943028 0.394418
3 -0.850136 0.464778 -0.617747
4 -1.077967 -1.127802 -1.641868
'''
if __name__ == "__main__":
dataframe = pd.DataFrame(np.random.randn(100000, 2), columns=['A', 'B'])
# to shared DataFrame object, …Run Code Online (Sandbox Code Playgroud) 我正在使用Python环境的Pandas模块制作一个基于内存的"大数据"实时计算模块.
因此响应时间是该模块的质量,非常关键且重要.
为了处理大型数据集,我将数据拆分并并行处理子拆分数据.
在存储子数据的结果的部分,花费很多时间(第21行).
我认为内部存储器深度复制出现或传递的子数据不在内存中共享.
如果我用C或C++编写模块,我将使用如下所示的指针或引用.
"process = Process(target = addNewDerivedColumn,args = [resultList,&sub_dataframe ])"
要么
"process = Process(target = addNewDerivedColumn,args = [resultList,sub_dataframe])
def addNewDerivedColumn(resultList,split_sub_dataframe&):...."
是否有一种避免内存深度复制或减少多处理时间的好方法? "不优雅"很好.我准备让我的代码变脏了.我尝试过weekref,RawValue,RawArray,Value,Pool但都失败了.
该模块正在MacOS中开发,最终将在Linux或Unix中运行.
不要考虑Windows操作系统.
这是代码.
真正的代码在我的办公室,但结构和逻辑与真实的相同.
1 #-*- coding: UTF-8 -*-'
2 import pandas as pd
3 import numpy as np
4 from multiprocessing import *
5 import time
6
7
8 def addNewDerivedColumn(resultList, split_sub_dataframe):
9
10 split_sub_dataframe['new_column']= np.abs(split_sub_dataframe['column_01']+split_sub_dataframe['column_01']) / 2
11
12 print split_sub_dataframe.head()
13
14 '''
15 i think that the …Run Code Online (Sandbox Code Playgroud)