我有一个 TSV 文件,其中第一行是标题。我想从这个文件创建一个 JavaPairRDD。目前,我正在使用以下代码执行此操作:
TsvParser tsvParser = new TsvParser(new TsvParserSettings());
List<String[]> allRows;
List<String> headerRow;
try (BufferedReader reader = new BufferedReader(new FileReader(myFile))) {
allRows = tsvParser.parseAll((reader));
//Removes the header row
headerRow = Arrays.asList(allRows.remove(0));
}
JavaPairRDD<String, MyObject> myObjectRDD = javaSparkContext
.parallelize(allRows)
.mapToPair(row -> new Tuple2<>(row[0], myObjectFromArray(row)));
我想知道是否有一种方法可以让 javaSparkContext 直接读取并处理文件,而不是将操作分成两部分。
编辑:这不是 How do I convert csv file to rdd 的重复项,因为我正在 Java 中寻找答案,而不是 Scala。
最佳答案
使用https://github.com/databricks/spark-csv
import org.apache.spark.sql.SQLContext
SQLContext sqlContext = new SQLContext(sc);
DataFrame df = sqlContext.read()
.format("com.databricks.spark.csv")
.option("inferSchema", "true")
.option("header", "true")
.option("delimiter","\t")
.load("cars.csv");
df.select("year", "model").write()
.format("com.databricks.spark.csv")
.option("header", "true")
.save("newcars.csv");
关于java - 在java中使用Apache Spark读取TSV文件的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38751298/