У меня есть датафрейм с вложенной структурой, так что я точно знаю, что это structType, однако, поскольку он был преобразован из json, он выводит схему в виде строки вместо struct.Я хотел бы, чтобы это оставалось структурным.Как мне подойти к этой проблеме?
В настоящее время кадр данных выглядит следующим образом:
_________________________________________________________________
|issuingClub | memberCards |
-------------------------------------------------------------------
| 1234 |[{u'createdClub': u'1234', u'cardStatus': u'ACTIVE',|
| u'issuedReason': u'new member', u'cardType': |
| u'MEMBERSHIPACCOUNT', u'cardNumber':u'109214092'}] |
-------------------------------------------------------------------
| 3712 |[{u'createdClub': u'3712', u'cardStatus': u'EXPIRE',|
| u'issuedReason': u'old member', u'cardType': |
| u'MEMBERSHIPACCOUNT', u'cardNumber':u'109214092'}] |
-------------------------------------------------------------------
Схема для этого кадра данных выводится как:
root:
|-- issuingClub: string (nullable = true)
|-- memberCards: string (nullable = true)
Вместочленские карты, будучи строкой, я хотел бы преобразовать в StructTypeКак мне это сделать?Пожалуйста, помогите!
Я пытался использовать этот код:
import json
def parse_json(array_str):
json_obj = json.loads(array_str)
for item in json_obj:
yield (item["createdClub"],item["cardStatus"],item["issuedReason"],item["cardType"],item["cardNumber"])
from pyspark.sql.types import ArrayType, IntegerType, StructType, StructField
json_schema = ArrayType(StructType([StructField("u'createdClub", StringType(), nullable=False), StructField("u'cardStatus", StringType(), nullable=False),
StructField("u'issuedReason", StringType(), nullable=False),
StructField("u'cardType",StringType(),nullable=False),
StructField("u'cardNumber",StringType(),nullable=False)]))
from pyspark.sql.functions import udf
udf_parse_json = udf(lambda str: parse_json(str), json_schema)
df_new = old_df.select(delta_final_df["issuingClub"], udf_parse_json(delta_final_df["memberCards"]).alias("memberCards"))
Получение этой ошибки в результате этого:
ValueError: Expecting property name enclosed in double quotes: line 1 column 3 (char 2)