PySpark 通过组合列创建一个 json 字符串

PySpark create a json string by combining columns

我有一个数据框。

from pyspark.sql.types import *
input_schema = StructType(
            [
                StructField("ID", StringType(), True),
                StructField("Date", StringType(), True),
                StructField("code", StringType(), True),
            ])
input_data = [
            ("1", "2021-12-01", "a"),
            ("2", "2021-12-01", "b"),
        ]
input_df = spark.createDataFrame(data=input_data, schema=input_schema)

我想执行一个转换,将一组列和内容组合成一个 json 字符串。要组合的列是提前知道的。输出应如下所示。

有什么建议的方法可以实现吗? 感谢对此的任何帮助。

您可以创建一个结构类型,然后转换为 json:

from pyspark.sql import functions as F
col_to_combine = ['Date','code']
output = input_df.withColumn('combined',F.to_json(F.struct(*col_to_combine)))\
                 .drop(*col_to_combine)

output.show(truncate=False)
+---+--------------------------------+
|ID |combined                        |
+---+--------------------------------+
|1  |{"Date":"2021-12-01","code":"a"}|
|2  |{"Date":"2021-12-01","code":"b"}|
+---+--------------------------------+