pyspark 从JSON字符串中提取多个列

xdyibdwo  于 2022-12-11  发布在  Spark
关注(0)|答案(2)|浏览(135)

我有一个JSON数据,我想以表格形式表示它,然后将其写入不同的格式(parquet)

结构描述

root
|-- : string (nullable = true)

示例数据

+----------------------------------------------+

+----------------------------------------------+
|{"deviceTypeId":"A2A","deviceId":"123","geo...|
|{"deviceTypeId":"A2B","deviceId":"456","geo...|
+----------------------------------------------+

预期输出

+--------------+------------+
|  deviceTypeId|deviceId|...| 
+--------------+--------+---+
|           A2A|     123|   |
|           A2B|     456|   |
+--------------+--------+---+

我试着拆分字符串,但这似乎不是一种有效的方法

split_col = split(df_explode[''], ',')

然后提取列,但它也会追加初始字符串。

df_1 = df_explode.withColumn('deviceId',split_col.getItem(1))
# df_1 = df_explode.withColumn('deviceTypeId',split_col.getItem(0))
printOutput(df_1)

我正在寻找更好的方法来解决这个问题

k4aesqcs

k4aesqcs1#

爆炸功能仅适用于Array。
在您的情况下,这是一个json,您应该使用from_json函数。
请从pyspark.sql函数中引用from_json

f87krz0w

f87krz0w2#

我可以使用from_json函数来实现。

#Convert json column to multiple columns
schema = getSchema()
dfJSON = df_explode.withColumn("jsonData",from_json(col(''),schema)) \
                   .select("jsonData.*")
dfJSON.printSchema()
dfJSON.limit(100).toPandas()

我们需要创建解析Json数据的Json Schema。

def getSchema():
    schema = StructType([ 
                StructField('deviceTypeId', StringType()),
                StructField('deviceId', StringType()),
                ...
                ])
    return schema

此Json数据中的值字符串为空,因此列由空字符串组成

相关问题