azure 从pyspark对象框架列值中删除方括号

sqyvllje  于 12个月前  发布在  Spark
关注(0)|答案(1)|浏览(154)

我有一个带值的嵌套列:
然而,我期望的结果是删除花括号之前和之后的方括号:
| 司机|期望列|
| --|--|
| [{“driverId”:“2015016200-3edf”,“driverName”:“Dianne Uy”}]|{“driverId”:“2015016200-3edf”,“driverName”:“Dianne Uy”}|

df= (df
     .withColumn("drivers", f.from_json("drivers", driver_schema))
     .withColumn("expected_column", f.col("drivers").getItem(0))
    )

但是,我得到了这个错误AnalysisException:[INVALID_EXTRACT_FIELD_TYPE]字段名称应为非空字符串文字,但它为“0”。
其他方法来实现我的预期列/结果?

f45qwnt8

f45qwnt81#

要解决这个问题,您可以使用PySpark的get_json_object函数,它允许您从“drivers”列中提取第一个JSON对象。
下面是示例代码片段:

from pyspark.sql import SparkSession
from pyspark.sql.functions import get_json_object
spark = SparkSession.builder \
    .appName("Remove Square Brackets") \
    .getOrCreate()
data = [
    ('[{"driverId":"2015016200-3edf","driverName":"Dianne Uy"}]',),
]
schema = "drivers STRING"
df = spark.createDataFrame(data, schema)
df = df.withColumn("expected_column", get_json_object("drivers", "$[0]"))
df.show(truncate=False)

相关问题