Переименуйте столбцы в spark с помощью @JsonProperty при создании наборов данных.

Есть ли способ переименовать имена столбцов в наборе данных, используя аннотации Джексона при создании набора данных?

Мой класс кодировщика выглядит следующим образом:

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
import scala.Serializable;
import javax.persistence.Table;

      @Builder 
      @Data 
      @AllArgsConstructor
      @EqualsAndHashCode 
      @Table(name = "sample_table")
      public class SampleRecord implements Serializable {
         @JsonProperty("sample_id")
         private Long sampleId;
         @JsonProperty("sample_name")
         private String name;
         @JsonProperty("sample_desc")
         private String description; 
      }

Моя цель — переименовать столбцы в соответствии с @JsonProperty, чтобы я мог повторно использовать один и тот же класс и функции json.

Пожалуйста, найдите связанные версии модулей: - Spark: 2.4.0 (со scala 2.11) - jackson-module-scala_2.11: 2.9.6

Дайте мне знать, если вам нужна дополнительная информация. Помощь приветствуется.


person Arjav96    schedule 24.01.2019    source источник


Ответы (1)


Интересная идея. Как бы я это сделал:

  1. Погрузите свои данные в фреймворк данных.
  2. Напишите служебный метод, который принимает фрейм данных и имя класса (здесь SampleRecord).
  3. Используйте самоанализ для чтения аннотаций (в конечном итоге вы можете добавить некоторые, если вам нужно определить определенные свойства).
  4. Переименуйте столбцы с помощью withColumnRenamed() в кадре данных.
  5. Верните измененный фрейм данных.

привет

person jgp    schedule 25.01.2019
comment
Это не решит вариант использования, мы пытаемся переименовать столбцы с помощью @JsonProperty, чтобы можно было избежать withColumnRename. - person Sudev Ambadi; 25.01.2019
comment
Я понимаю, что вы хотели бы сделать это до начала приема пищи, но почему? Почему вы не хотите использовать withColumnRenamed()? - person jgp; 25.01.2019
comment
так что нет прямого способа создать набор данных и позволить Джексону обрабатывать имена столбцов для класса кодировщика? - person Arjav96; 25.01.2019
comment
Я должен признать, что у меня нет большого опыта работы с набором данных «SomethingElseThanRow», мы с моей командой обычно используем кадры данных (набор данных «Row»), поэтому мы можем использовать Tungsten. Когда вы загружаете в Tungsten, вы можете указать схему, и вы можете автоматически построить свою схему из аннотаций. - person jgp; 26.01.2019
comment
Итак, есть ли способ использовать Dataset‹Row› df = spark.createDataframe(records, SampleRecord.class) и построить схему с использованием аннотаций Джексона?? - person Arjav96; 26.01.2019
comment
Где ваши данные изначально? в файле CSV? JSON? база данных? Для начала вы можете просмотреть бесплатный контент. manning.com/ и вместо .option(inferSchema, true) вы можете указать схему с именами ваших столбцов. - person jgp; 26.01.2019
comment
Чтобы добавить к нему - для переименования вложенных столбцов можно использовать sparkbyexamples.com/spark/rename-a-column-on-spark-dataframes/ - person DanMatlin; 28.01.2020