【问题标题】:Rename columns in spark using @JsonProperty while creating Datasets在创建数据集时使用 @JsonProperty 重命名 spark 中的列
【发布时间】:2019-06-18 12:40:12
【问题描述】:

有没有办法在创建数据集时使用 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) -杰克逊模块scala_2.11:2.9.6

如果您需要更多信息,请告诉我。帮助表示赞赏。

【问题讨论】:

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


    【解决方案1】:
    
    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;
        }
    }
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 这不会解决用例,我们正在尝试使用 @JsonProperty 重命名列,这样可以避免 withColumnRename。
      • 我知道您想在摄取开始之前这样做,但为什么呢?为什么不想使用 withColumnRenamed()?
      • 所以没有直接的方法来创建数据集并让杰克逊处理编码器类的列名?
      • 我必须承认我对 Dataset 没有丰富的经验,我和我的团队通常使用数据框 (Dataset),因此我们可以利用 Tungsten。当你在 Tungsten 中摄取时,你可以指定一个模式,你可以从注释中自动构建你的模式。
      • 那么有没有办法使用 Dataset df = spark.createDataframe(records, SampleRecord.class) 并使用 Jackson 注释构建架构??
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-12-20
      • 1970-01-01
      • 2021-01-28
      • 2023-03-08
      • 2023-03-12
      • 1970-01-01
      • 2016-06-06
      相关资源
      最近更新 更多