Scala 使用Spark 2.3将列名作为新元素添加到结构数组中

Scala 使用Spark 2.3将列名作为新元素添加到结构数组中,scala,apache-spark,apache-spark-sql,Scala,Apache Spark,Apache Spark Sql,我的current.printSchema如下所示,示例JSON数据如图所示,其中列(ada、adw)的类型为array(struct) 我需要最终的输出数据,如下所示,其中数组(struct)列(ada,adw)应该作为附加元素追加到struct中,并且应该有一个名为event的外部列 final_output_data to be: 因此,我可以使用如下所示的explode函数来获得所需的输出: SELECT vin, tt, msg_type, events.SN as SN,

我的current.printSchema如下所示,示例JSON数据如图所示,其中列(ada、adw)的类型为array(struct)

我需要最终的输出数据,如下所示,其中数组(struct)列(ada,adw)应该作为附加元素追加到struct中,并且应该有一个名为event的外部列

  final_output_data to be:

因此,我可以使用如下所示的explode函数来获得所需的输出:

 SELECT vin, tt, msg_type, events.SN as SN, events.E as ST,events.V as SV FROM table_name LATERAL VIEW explode(event) exploded_table as events;
我在Spark 2.4中看到,我们可以使用如下所示的arrays_zip函数,但是否有一种方法可以通过UDF使用Spark 2.3实现这一点,任何帮助都将不胜感激

    val mod_df = df.withColumn("SIGNAL_TEST", 
    arrays_zip(
        array(lit("ABS")).as("SN"),
        col("ABS.E").as("E"),
        col("ABS.V").alias("V")
                ))
.withColumn("SIGNAL", 
           $"SIGNAL_TEST".cast(ArrayType(elem_struct_recomposed)))
    val mod_df = df.withColumn("SIGNAL_TEST", 
    arrays_zip(
        array(lit("ABS")).as("SN"),
        col("ABS.E").as("E"),
        col("ABS.V").alias("V")
                ))
.withColumn("SIGNAL", 
           $"SIGNAL_TEST".cast(ArrayType(elem_struct_recomposed)))