![](/img/trans.png)
[英]How convert JavaRDD<Row> to JavaRDD<List<String>>?
[英]JavaRDD<String> to JavaRDD<Row>
我正在使用以下命令將 txt 文件作為 JavaRDD 讀取:
JavaRDD<String> vertexRDD = ctx.textFile(pathVertex);
現在,我想將其轉換為 JavaRDD,因為在該 txt 文件中我有兩列整數,並且希望在拆分列后向行添加一些模式。
我也試過這個:
JavaRDD<Row> rows = vertexRDD.map(line -> line.split("\t"))
但是說我不能將映射函數分配給“對象”RDD
謝謝!
當您應用諸如map
的轉換時,從另一個JavaRDD
創建一個JavaRDD
是隱式的。 在這里,您創建的 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");
可以將這兩列定義為一個類的字段,然后就可以使用
JavaRDD<Row> rows = rdd.map(new Function<ClassName, Row>() {
@Override
public Row call(ClassName target) throws Exception {
return RowFactory.create(
target.getField1(),
target.getUsername(),
}
});
然后創建 StructField,最后使用
StructType struct = DataTypes.createStructType(fields);
Dataset<Row> dataFrame = sparkSession.createDataFrame(rows, struct);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.