簡體   English   中英

JavaRDD<String> 到 JavaRDD<Row>

[英]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

  1. 如何從 JavaRDD 創建 JavaRDD
  2. 如何使用映射到 JavaRDD?

謝謝!

當您應用諸如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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM