Spark:将结构类型列拆分为多个列,而不使用 ".*" 星号运算符



我的 Spark 数据帧中有一个StructType列,我想将其拆分为多个列。

case class Struct(FIELD_1: Int, FIELD_2: Int, FIELD_3: Int)
val df = Seq(
    (Struct(1,2,3), 2),
    (Struct(4,5,6), 3)
).toDF("col0", "col1")
df.show()
// df: org.apache.spark.sql.DataFrame = [col0: struct<FIELD_1: int, 
// FIELD_2: int ... 1 more field>, col1: int]
// +---------+----+
// |     col0|col1|
// +---------+----+
// |[1, 2, 3]|   2|
// |[4, 5, 6]|   3|
// +---------+----+

将其拆分为其组成组件的一种方法是使用 .* 运算符。只是:

df.select("col0.*", "col1").show()
// +-------+-------+-------+----+
// |FIELD_1|FIELD_2|FIELD_3|col1|
// +-------+-------+-------+----+
// |      1|      2|      3|   2|
// |      4|      5|      6|   3|
// +-------+-------+-------+----+

但是,如果我想先在返回结构的列上应用一些 UDF myUDF,那么使用 .* 方法就会变得不方便。是否有一种flattenStruct式的方法或函数允许我执行此操作?

df.select(flattenStruct(myUDF($"col0")), "col1") 

您可以先在第一个 DF 中应用 UDF,然后在下一个选择中选择使用 *? df.select(myUDF($"col0").as("col0"), "col1").select($"col0.*", "col1")

相关内容

  • 没有找到相关文章

最新更新