【问题标题】:Flatten dataframe for non element values展平非元素值的数据框
【发布时间】:2023-09-05 04:07:01
【问题描述】:

下面是我的数据结构:

root    
 |-- platform_build_id: string (nullable = true)
 |-- pro: struct (nullable = true)
 |    |-- av: string (nullable = true)
 |    |-- avc: string (nullable = true)

我尝试使用爆炸功能

val flattened = Data_df.withColumn("pro", explode(array($"pro")))

如果pro 列中有一个元素,这将起作用,但在我的情况下,我应该使用什么来将此数据转换为扁平格式。

【问题讨论】:

    标签: scala apache-spark explode flatten


    【解决方案1】:

    .select() 与结构列 (pro.*) 一起使用会导致扁平化格式。

    Data_df.select("platform_build_id","pro.*").show()
    

    示例:

    val s_ds=Seq("""{"platform_build_id":"1234","pro":{"av":"pro_av","avc":"pro_avc"}}""").toDS
    
    spark.read.json(s_ds).printSchema
    
    //root
    // |-- platform_build_id: string(nullable = true)
    // |-- pro: struct (nullable = true)
    // |    |-- av: string (nullable = true)
    // |    |-- avc: string (nullable = true)
    
    spark.read.json(s_ds).select("platform_build_id","pro.*").show()
    

    结果:

    +-----------------+------+-------+
    |platform_build_id|    av|    avc|
    +-----------------+------+-------+
    |             1234|pro_av|pro_avc|
    +-----------------+------+-------+
    

    【讨论】: