Spark: разделить столбец StructType на несколько столбцов без использования оператора звездочки ". *" - PullRequest
0 голосов
/ 27 декабря 2018

В моем 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|
// +-------+-------+-------+----+

Однако, если я захочу применить сначала к столбцу некоторую UDF myUDF, которая также возвращает структуру, использование метода .* становится неудобным.Есть ли flattenStruct -эксклюзивный метод или функция, которая позволяет мне это делать?

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

1 Ответ

0 голосов
/ 27 декабря 2018

Вы можете сначала применить UDF в первом DF, а затем выбрать, используя * в следующем выборе?df.select(myUDF($"col0").as("col0"), "col1").select($"col0.*", "col1")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...