我正在使用以下命令将txt文件作为JavaRDD读取:
JavaRDD<String> vertexRDD = ctx.textFile(pathVertex);
现在,我想将其转换为JavaRDD,因为在该txt文件中我有两列Integers,并希望在拆分列后向行添加一些模式。
我也尝试了这个:
JavaRDD<Row> rows = vertexRDD.map(line -> line.split("\t"))
但是说我无法将地图功能分配给“对象”RDD
谢谢!
当您应用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");