java - 在java中使用Apache Spark读取TSV文件的最佳方法

标签 java csv apache-spark

我有一个 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/

相关文章:

hadoop - Spark 分区修剪在 1.6.0 上不起作用

Java 循环泛型

java - 导出的 Javafx 应用程序不作为 Jar 文件运行 (Eclipse)

java - 如何将 @DataField Camel 注释中的 defaultValue 参数设置为空字符串而不是 null?

python - 在 CSV 文件中写入和读取 float 和字符串 - python

mysql - 将数据从 csv 导入到 mariaDB 缺少第一列

java - 在 Scala 中重写 Spark Java 应用程序

java - 软键盘关闭时执行操作

java - 如何获取并按空格分割输入的多个字符串行,然后将它们添加到Java中的arrayList?

python - 如何解决: Very large size tasks in spark