怎么用java将sql查询结果存成weka的标准.arff文件?
public void questQuery(){
try{
String sql ="select * from test1";
ResultSet rs = DataPrep.getRS(sql);
while (rs.next()){
System.out.println(rs.getInt("morning_cmt")+" "+rs.getInt("night_sts"));
}
} catch (Exception e){
e.printStackTrace();
}
}
查到了所需要的数据 怎么存成.arff文件呢?
instance那块不是很明白 展开
@relation ‘ 这里填写一些对实例的处理记录,没啥特别用处’
@attribute 属性名称 属性类别 这里你就要把数据库中的表中的键及对应类型写入
@data
{属性编号 属性值,属性编号 属性值 。。。} 数据库中的第一条数据
{属性编号 属性值,属性编号 属性值 。。。} 数据库中的第二条数据
{属性编号 属性值,属性编号 属性值 。。。}
{属性编号 属性值,属性编号 属性值 。。。}
知道了这个格式,你就可以直接按照改格式用buffer写出去保存为arff格式即可
没错 比如我需要保存2个attribute morning_cmt 和night_sts, 用sql查出来以后,怎么写到arff文件里呢?打印出来我明白是
while (rs.next()){
System.out.println(rs.getInt("morning_cmt")+" "+rs.getInt("night_sts"));
}
要是存进文件呢?addElement()还是什么么?
import weka.core.Instances;
import weka.experiment.InstanceQuery;
...
InstanceQuery query = new InstanceQuery();
query.setDatabaseURL("jdbc_url");
query.setUsername("the_user");
query.setPassword("the_password");
query.setQuery("select * from whatsoever");
// if your data is sparse, then you can say so, too:
// query.setSparseData(true);
Instances data = query.retrieveInstances();
或者
import weka.core.Instances;
import weka.core.converters.DatabaseLoader;
...
DatabaseLoader loader = new DatabaseLoader();
loader.setSource("jdbc_url", "the_user", "the_password");
loader.setQuery("select * from whatsoever");
Instances data = loader.getDataSet();
增量式:
import weka.core.Instance;
import weka.core.Instances;
import weka.core.converters.DatabaseLoader;
...
DatabaseLoader loader = new DatabaseLoader();
loader.setSource("jdbc_url", "the_user", "the_password");
loader.setQuery("select * from whatsoever");
Instances structure = loader.getStructure();
Instances data = new Instances(structure);
Instance inst;
while ((inst = loader.getNextInstance(structure)) != null)
data.add(inst);
注意
• Not all database systems allow incremental retrieval.
• Not all queries have a unique key to retrieve rows incrementally. In that
case, one can supply the necessary columns with thesetKeys(String)
method (comma-separated list of columns).
• If the data cannot be retrieved in an incremental fashion, it is first fully
loaded into memory and then provided row-by-row (“pseudo-incremental”).
2013-04-21
ArffSaver saver = new ArffSaver();//ArffSaver 类是写入arff文件的相关类
saver.setInstances(data);//设置你要存的instances
saver.setFile(new File("D://test.arff"));//设置目标文件
saver.writeBatch();//把instance们写入