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

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


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

我也尝试过这个:

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


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


如何从JavaRDD中创建JavaRDD
如何使用映射到JavaRDD?


谢谢!

最佳答案

当您应用诸如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");

关于java - JavaRDD <String>到JavaRDD <Row>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55279895/

10-10 16:47