提问者:小点点

如何读取CSV格式数据从JavaRDD<字符串>使用结构类型架构在火花Java


使用SparkJava,我试图读取JavaRDD形式的逗号分隔值的数据,使用结构类型动态模式。

我知道我可以使用下面的方法读取一个json,传递一个模式(其中schemaStr-

Dataset<Row> df = spark.read().schema(schemaStr).json(javaRDD);


javaRDD has value as: name1,address11,city111

请建议如何使用结构类型模式读取JavaRDD,因为我有逗号分隔的数据作为JavaRDD。无论如何,我需要使用结构类型模式读取数据,以便将其转换为数据框,因为我有一个动态模式生成器实用程序。


共1个答案

匿名用户

所以如果我理解正确,你想将JavaRDD转换为数据集

StructType schema = new StructType(new StructField[]{
                new StructField("_1", DataTypes.StringType, false, Metadata.empty()),
                new StructField("_2", DataTypes.StringType, false, Metadata.empty()),
                new StructField("_3", DataTypes.StringType, false, Metadata.empty())
        });

        JavaRDD<String> rdd1 = spark
                .range(5)
                .javaRDD()
                .map(s -> s+",b,c");

        JavaRDD<Row> rdd2 = rdd1.map(s -> s.split(","))
                .map(s -> RowFactory.create((Object[]) s));

        Dataset<Row> df = spark.createDataFrame(rdd2, schema);

        df.show();

输出:

+---+---+---+
| _1| _2| _3|
+---+---+---+
|  0|  b|  c|
|  1|  b|  c|
|  2|  b|  c|
|  3|  b|  c|
|  4|  b|  c|
+---+---+---+