创建数据集时使用@JsonProperty重命名spark中的列

时间:2019-01-24 17:33:24

标签: java scala apache-spark java-8 apache-spark-encoders

创建数据集时,是否可以使用Jackson批注重命名数据集中的列名?

我的编码器类如下:

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

让我知道是否需要更多信息。帮助表示赞赏。

2 个答案:

答案 0 :(得分:0)

有趣的想法。我会这样做的方式:

  1. 将数据提取到数据框中。
  2. 写一个实用程序方法,该方法采用数据框和类名(此处为SampleRecord)。
  3. 使用自省功能读取注释(如果需要定义特定属性,最终可以添加一些注释)。
  4. 在数据帧上使用withColumnRenamed()重命名列。
  5. 返回修改后的数据框。

答案 1 :(得分:0)


public class SampleRecord implements Serializable {
         private Long sampleId;

         private String name;

         private String description; 


@JsonProperty("sample_id")
public void setSampleId(Long sampleId) {
        this.sampleId = sampleId;
    }

@JsonProperty("sample_name")
public void setName(String name) {
        this.name = name;
    }


@JsonProperty("sample_desc")
public void setDescription(String description) {
        this.description = description;
    }
}