SPARK dataframe возвращает ноль при попытке применить схему к данным JSON - PullRequest
0 голосов
/ 12 октября 2019

Я использую SPARK Java API, чтобы прочитать текстовый файл, преобразовать его в JSON, а затем применить к нему схему. Схема может варьироваться в зависимости от таблицы сопоставления в базе данных, поэтому мне нужно сначала преобразовать файл в JSON, чтобы сопоставление схемы не должно быть в порядке столбцов. Вот что я сделал:

// Defined the schema (basic representation)
StructType myschema = new StructType().add("a", DataTypes.StringType, true)
                                      .add("b", DataTypes.StringType, true)
                                      .add("x", DataTypes.StringType, true)
                                      .add("y", DataTypes.IntegerType, true)
                                      .add("z", DataTypes.BooleanType, true);

//Reading a pipe delimited text file as JSON, the file has less columns than myschema
Dataset<String> data = spark.read().option("delimiter","|").option("header","true").csv(myFile).toJSON();

Таблица выше возвращает что-то вроде этого:

data.show(false);

|value|
+----------------------------------------+
|      {"x":"name1","z":"true","y":"1234"}|
|      {"x":"name2","z":"false","y":"1445"}|
|      {"x":"name3","z":"true",:y":"1212"}|

Моя проблема возникает, когда я запускаю это:

Dataset<Row> data_with_schema = spark.read().schema(myschema).json(data);

Потому что мой результат превращается в это:

data_with_schema.show(false);
|x|y|z|
+-------+-------+-------+
|null  |null  |null  |
|null  |null  |null  |
|null  |null  |null  |

Я прочитал в stackoverflow, что это может быть потому, что я пытаюсь привести строки json в целые числа. Однако я попытался определить переменную данных как набор данных строки вместо набора строк, но произошла ошибка несовместимых типов. Я не уверен, что такое обходной путь или какова реальная проблема.

...