如何使用Spark Dataset的map保持相同schema的列顺序?

t1qtbnec  于 2023-08-06  发布在  Apache
关注(0)|答案(1)|浏览(161)

我正在从Hive表中阅读数据,然后尝试使用从其他列派生的额外列来丰富它。但Spark改变了我的模式并按名称排序所有列时遇到了一些问题。
在调用withColumn()并使用我丰富的类对它进行编码之后,模式是正确的,但是每当我调用map()时,模式就会发生变化,列的顺序就错了。如何告诉Spark保持列的原始顺序?

  1. session.table("myTable")
  2. .as(Encoders.bean(Base.class))
  3. .withColumn("enrichedColumn", lit(""))
  4. .as(Encoders.bean(Enriched.class))
  5. .map(enriched -> enriched.enrich(), Encoders.bean(Enriched.class))
  6. .printSchema();

字符串

xn1cxnb4

xn1cxnb41#

很难从代码的小片段中分辨出来,但我预见到了你的模型在这里的一个问题。
必须确保Enriched.class和Base.class具有相同的有序字段。“
例如,这不会提供相同的顺序:

  1. Base:
  2. x;
  3. y;
  4. Enriched:
  5. y;
  6. x;

字符串
就不会被点一样的...

相关问题