Как обновить struct field spark/scala

У меня есть структура как часть моего json .

store: struct (c1, c2, c3, c4)

Я хотел бы обновить c2на месте, чтобы не создавалось новое поле. После обновления это должна быть та же структура с новым значением for c2.

В spark / scala я уже пробовал:

df.withColumn("store.c2",newVal).

Но это создает новое поле store.c2,
Столбцы не являются частью struct, я могу обновить.

df.withColumn("columnTen",newValue) не создает новое поле и обновляется newValue.

Спасибо!

2 ответа

  1. вы можете создать новый structtype на основе существующей схемы, используя следующее:

    val newstructtype = StructType(existing_df.schema.map( x => {
    if (x.name == "fieldname_to_change") StructField("new_fieldname",TimestampType,true)
    else x})
    
  2. делающий это

    df.withColumn("store",struct($"store.c1", $"store.c2", $"store.c3", lit(newValue) as "c4"))
    

    заменит значение в store.c4поле.