我正在使用以下命令将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/