我有超过700K行的巨大csv行数。我必须解析那些csv的行和do ops。我想通过使用线程来做到这一点。我第一次尝试做的很简单。每个线程都应该有唯一的csv行。我只有有限的行数只能读到3000。我创建了3个线程。每个线程应读取一行csv。以下是代码:java读取巨大csv的行数
import java.io.*;
class CSVOps implements Runnable
{
static int lineCount = 1;
static int limit = 3000;
BufferedReader CSVBufferedReader;
public CSVOps(){} // default constructor
public CSVOps(BufferedReader br){
this.CSVBufferedReader = br;
}
private synchronized void readCSV(){
System.out.println("Current thread "+Thread.currentThread().getName());
String line;
try {
while((line = CSVBufferedReader.readLine()) != null){
System.out.println(line);
lineCount ++;
if(lineCount >= limit){
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
readCSV();
}
}
class CSVResourceHandler
{
String CSVPath;
public CSVResourceHandler(){ }// default constructor
public CSVResourceHandler(String path){
File f = new File(path);
if(f.exists()){
CSVPath = path;
}else{
System.out.println("Wrong file path! You gave: "+path);
}
}
public BufferedReader getCSVFileHandler(){
BufferedReader br = null;
try{
FileReader is = new FileReader(CSVPath);
br = new BufferedReader(is);
}catch(Exception e){
}
return br;
}
}
public class invalidRefererCheck
{
public static void main(String [] args) throws InterruptedException
{
String pathToCSV = "/home/shantanu/DEV_DOCS/Contextual_Work/invalid_domain_kw_site_wise_click_rev2.csv";
CSVResourceHandler csvResHandler = new CSVResourceHandler(pathToCSV);
CSVOps ops = new CSVOps(csvResHandler.getCSVFileHandler());
Thread t1 = new Thread(ops);
t1.setName("T1");
Thread t2 = new Thread(ops);
t1.setName("T2");
Thread t3 = new Thread(ops);
t1.setName("T3");
t1.start();
t2.start();
t3.start();
}
}
类CSVResourceHandler简单的发现,如果通过文件存在,然后创建一个BufferedReader,并赋予它。此阅读器传递给CSVOps类。它有一个方法readCSV,它读取一行csv并打印出来。有一个限制设置为3000.
现在线程为no来搞乱计数,我声明这些限制和计数变量都为静态。当我运行这个程序时,我得到了奇怪的输出。我只有约1000条记录,有时候我得到了1500条。它们是随机排列的。在输出结束时,我得到2行csv和当前线程名称出来主要!
我是线程中的新手。我想要的是阅读这个csv应该变快。请建议可以做些什么
使用多个阅读线程将无济于事。阻塞点不是CPU而是IO。 –
我建议你用一个线程工作,并在读取它时将每一行传递给一个可由第二个线程使用的队列。这确保了订单得以保留。 –
@PeterLawrey:很酷的主意! – Shades88