【发布时间】:2020-05-05 10:48:02
【问题描述】:
我希望能够更新嵌套数据集中的值。为此,我在 Spark 中创建了一个嵌套数据集。它具有以下架构结构:-
root
|-- field_a: string (nullable = false)
|-- field_b: struct (nullable = true)
| |-- field_d: struct(nullable = false)
|-- field_not_to_update: string(nullable = true)
| |-- field_to_update: string(nullable = false)
| field_c: string (nullable = false)
现在我想更新数据集中field_to_update 的值。我试过了
aFooData.withColumn("field_b.field_d.field_to_update", lit("updated_val")
也试过了,
aFooData.foreach(new ClassWithForEachFunction());
其中ClassWithForEachFunction implements ForEachFunction<Row> 并具有方法public void call(Row aRow) 来更新field_to_update 属性。对 lamda 也进行了同样的尝试,但它抛出了 Task not serializable 异常,因此必须进行很长时间。
到目前为止,它们都没有成果,在第二种情况下,我得到了带有 foreach 和名称为 field_b.field_d.field_to_update 的新列的相同数据集。还有其他相同的建议吗?
【问题讨论】:
标签: java apache-spark apache-spark-sql