如何根据 Java Spark 2.1.1 中的字段名称对 structType 进行排序/排序

Posted

技术标签:

【中文标题】如何根据 Java Spark 2.1.1 中的字段名称对 structType 进行排序/排序【英文标题】:How to Order/Sort the structType based on the field names in Java Spark 2.1.1 【发布时间】:2019-03-07 04:50:45 【问题描述】:

我有一个 structType 架构,我需要根据字段名称对架构进行排序/排序,下面我正在共享 StructType。

StructType schema = StructType(StructField(zzz,StringType,true), 
                               StructField(kkk,StringType,true), 
                               StructField(aaa,StringType,true),
                               StructField(lll,StringType,true))

我想得到上面的structType,如下

StructType schema = StructType(StructField(aaa,StringType,true), 
                                   StructField(kkk,StringType,true), 
                                   StructField(lll,StringType,true),
                                   StructField(zzz,StringType,true))

【问题讨论】:

【参考方案1】:

在java中,

new StructType(Stream.of(schema.fields())
.sorted(Comparator.comparing(StructField::name))
.collect(Collectors.toList()).toArray(new StructField[schema.fields().length]))

在斯卡拉 你可以做类似的事情,

var schema = StructType(Seq(StructField("zzz",StringType,true), 
                            StructField("kkk",StringType,true), 
                            StructField("aaa",StringType,true),
                            StructField("lll",StringType,true)))
def reorderSchema: StructType => StructType = schema => StructType(schema.sortBy(_.name))
var newSchema = reorderSchema(schema)

【讨论】:

当我使用java时,上述答案不起作用。我们应该为 sortBy(function f, order) 传递两个参数

以上是关于如何根据 Java Spark 2.1.1 中的字段名称对 structType 进行排序/排序的主要内容,如果未能解决你的问题,请参考以下文章

如何正确解析Java中的字节流

如何根据 Spark 中的 GMT lanuchTime 获取活动任务的运行时间?

如何根据spark scala中的条件进行累积和

如何使用 scala 根据 spark 中的条件获取 row_number()

如何根据 Spark Scala 中其他数据帧中的多列匹配过滤数据帧

如何告诉 Spark 根据范围跳过分区