Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理两个非常大的CSV文件。同时加载它们。将某些文件中的某些列替换为其他文件中的列_Java_Scala - Fatal编程技术网

Java 处理两个非常大的CSV文件。同时加载它们。将某些文件中的某些列替换为其他文件中的列

Java 处理两个非常大的CSV文件。同时加载它们。将某些文件中的某些列替换为其他文件中的列,java,scala,Java,Scala,要将一个csv文件中的某些列替换为其他csv文件中无法放入内存的列值。语言约束JAVA、SCALA。没有框架限制 其中一个文件具有键值类型的映射,而另一个文件具有大量列。我们必须将大CSV文件中的值替换为具有键值映射的文件中的值。假设您可以在内存中获取所有键值映射,然后以流式方式处理大的键值映射 import java.io.{File, PrintWriter} import scala.io.Source val kv_file = scala.io.Source.fromFile("ke

要将一个csv文件中的某些列替换为其他csv文件中无法放入内存的列值。语言约束JAVA、SCALA。没有框架限制


其中一个文件具有键值类型的映射,而另一个文件具有大量列。我们必须将大CSV文件中的值替换为具有键值映射的文件中的值。

假设您可以在内存中获取所有键值映射,然后以流式方式处理大的键值映射

import java.io.{File, PrintWriter}
import scala.io.Source

val kv_file = scala.io.Source.fromFile("key_values.csv")

// Construct a simple key value map
val kv : Map[String,String] = kv_file.getLines().map { line =>
  val cols = line.split(";")
  cols(0) -> cols(1)
}.toMap


val writer = new PrintWriter(new File("processed_big_file.csv" ))

big_file.getLines().foreach( line => {
  // this is the key-value replace logic (as I understood)
  val processed_cols = line.split(";").map { s => kv.getOrElse(s,s) }

  val out_line = processed_cols.mkString(";");
  writer.write(out_line)
})
// close file
writer.close()

假设您不能完全加载键值映射,那么您可以在内存中部分加载带有键值映射的文件,然后仍然处理大文件。当然,您必须对文件进行多次迭代才能处理所有键,前提是您可以在内存中获取所有键值映射,然后以流式方式处理大的键值映射

import java.io.{File, PrintWriter}
import scala.io.Source

val kv_file = scala.io.Source.fromFile("key_values.csv")

// Construct a simple key value map
val kv : Map[String,String] = kv_file.getLines().map { line =>
  val cols = line.split(";")
  cols(0) -> cols(1)
}.toMap


val writer = new PrintWriter(new File("processed_big_file.csv" ))

big_file.getLines().foreach( line => {
  // this is the key-value replace logic (as I understood)
  val processed_cols = line.split(";").map { s => kv.getOrElse(s,s) }

  val out_line = processed_cols.mkString(";");
  writer.write(out_line)
})
// close file
writer.close()

假设您不能完全加载键值映射,那么您可以在内存中部分加载带有键值映射的文件,然后仍然处理大文件。当然,您必须多次迭代文件才能处理所有密钥

不要同时加载它们。根本不要把它们载入内存。同时流式处理这两个问题。通过将转换后的csv记录流式输出,将流1和流2组合的新记录写入一个新文件。Java和Scala并非全部以大写形式写入。包含键值映射的文件是否足够小以容纳内存?不要同时加载它们。根本不要把它们载入内存。同时流式处理这两个问题。通过将转换后的csv记录流式输出,将流1和流2组合的新记录写入一个新文件。Java和Scala并非全部以大写形式写入。包含键值映射的文件是否足够小,可以放入内存?