Я новичок в искре и пытаюсь научиться этому Я пытаюсь создать набор данных из textFile, используя класс. Когда я делаю dataset.show (), он показывает все пустые и длина столбцов показывает 0.
Код:
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.SparkSession;
public class DatasetExample {
public static void main(String[] args) {
test(fileName);
}
static final String fileName = "inputFile";
static SparkConf conf = new SparkConf().setMaster("local").setAppName("Test");
static JavaSparkContext sc = new JavaSparkContext(conf);
static SparkSession session = SparkSession.builder().config(conf).getOrCreate();
private static void test(String fileName){
JavaRDD<Input> rdd = sc.textFile(fileName).map(new Function<String, Input>() {
@Override
public Input call(String s) throws Exception {
String[] str = s.split(",");
System.out.println(str[0] + " and " + str[1] + " and " + str[2]);
return new Input(str[0], str[1], Integer.parseInt(str[2]));
}
});
Dataset<Row> dataSet = session.createDataFrame(rdd, Input.class);
dataSet.show();
System.out.println("Column length is: " + dataSet.columns().length);
}
static class Input{
String key;
String value;
int number;
Input(String key, String value, int number){
this.key = key;
this.value = value;
this.number = number;
}
}
}
Выводится:
foo and A and 1
foo and A and 2
foo and A and 1
foo and B and 2
foo and B and 1
bar and C and 2
bar and D and 3
dek and X and 3
max and X and 3
eer and P and 3
++
||
++
||
||
||
||
||
||
||
||
||
||
++
Column length is: 0
Я не хочу явно определять схему, но хочу, чтобы она брала схему из структуры класса. Чего мне не хватает?