XavaRDD 秃鹰

问题描述 投票:1回答:1

我正在使用以下命令将txt文件作为JavaRDD读取:

JavaRDD<String> vertexRDD = ctx.textFile(pathVertex);

现在,我想将其转换为JavaRDD,因为在该txt文件中我有两列Integers,并希望在拆分列后向行添加一些模式。

我也尝试了这个:

JavaRDD<Row> rows = vertexRDD.map(line -> line.split("\t"))

但是说我无法将地图功能分配给“对象”RDD

  1. 如何从JavaRDD创建JavaRDD
  2. 如何使用map到JavaRDD?

谢谢!

java apache-spark rdd
1个回答
0
投票

当您应用JavaRDD之类的转换时,隐含地创建另一个map。这里,您创建的RDD是字符串数组的RDD(split的结果)。

要获取行的RDD,只需从数组中创建一行:

JavaRDD<String> vertexRDD = ctx.textFile("");
JavaRDD<String[]> rddOfArrays = vertexRDD.map(line -> line.split("\t"));
JavaRDD<Row> rddOfRows =rddOfArrays.map(fields -> RowFactory.create(fields));

请注意,如果您的目标是将JavaRDD<Row>转换为数据框(Dataset<Row>),则有一种更简单的方法。使用spark.read时可以更改分隔符选项以避免使用RDD:

Dataset<Row> dataframe = spark.read()
    .option("delimiter", "\t")
    .csv("your_path/file.csv");  
© www.soinside.com 2019 - 2024. All rights reserved.