我正在从Hive表中阅读数据,然后尝试使用从其他列派生的额外列来丰富它。但Spark改变了我的模式并按名称排序所有列时遇到了一些问题。
在调用withColumn()并使用我丰富的类对它进行编码之后,模式是正确的,但是每当我调用map()时,模式就会发生变化,列的顺序就错了。如何告诉Spark保持列的原始顺序?
session.table("myTable")
.as(Encoders.bean(Base.class))
.withColumn("enrichedColumn", lit(""))
.as(Encoders.bean(Enriched.class))
.map(enriched -> enriched.enrich(), Encoders.bean(Enriched.class))
.printSchema();
字符串
1条答案
按热度按时间xn1cxnb41#
很难从代码的小片段中分辨出来,但我预见到了你的模型在这里的一个问题。
必须确保Enriched.class和Base.class具有相同的有序字段。“
例如,这不会提供相同的顺序:
字符串
就不会被点一样的...