簡體   English   中英

Spark:將StructType列拆分為多個列,而無需使用“。*”星號運算符

[英]Spark: Split StructType column to multiple columns without using the “.*” star operator

我的Spark DataFrame中有一個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|
// +-------+-------+-------+----+

但是,如果我想myUDF在該列上應用一些UDF myUDF並返回一個結構,則使用.*方法會myUDF方便。 是否有flattenStruct -esque方法或函數允許我執行此操作?

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

您可以先在第一個DF中應用UDF,然后在下一個選擇中使用*進行選擇? df.select(myUDF($"col0").as("col0"), "col1").select($"col0.*", "col1")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM