Scala 使用Spark 2.3将列名作为新元素添加到结构数组中
我的current.printSchema如下所示,示例JSON数据如图所示,其中列(ada、adw)的类型为array(struct) 我需要最终的输出数据,如下所示,其中数组(struct)列(ada,adw)应该作为附加元素追加到struct中,并且应该有一个名为event的外部列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,
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)))