在pyspark中连接两个嵌套列

Concatenate two nested columns in pyspark

我有一个包含两列 "a" 和 "b" 的 spark Dataframe。

例如,一项数据是:

{"firstname" : {"s":"john"}, 
"secondname":{"s":"cena"} } 

我想通过连接名称来添加一列,因此该条目是:

{"firstname" : {"s":"john"}, 
"secondname":{"s":"cena"}, 
"fullname" :
{"s" : "john cena"} 
} 

我使用过 UDF,但它对于大数据来说是一个低效的解决方案,并且充当优化的黑匣子。 有没有办法通过使用 PySpark 函数或 SQL 查询来实现结果。

查找内联代码注释以获取答案解释

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._

object SampleJsonData {

  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder.master("local[*]").getOrCreate;


    //Load your JSON
    val df = spark.read.json("src/main/resources/sampleJsonData.json")

    //Add a new Column with name "fullname"
    df.withColumn("fullname",
      //Select nested "firstname.s" and "secondname.s" and assign it to "fullname.s"
      struct(concat(col("firstname.s"),lit(" "),col("secondname.s")).as("s")))
      //Write your JSON output
      .write.json("src/main/resources/sampleJsonDataOutput.json")


  }

}