Как распечатать «словарь» StringType() в виде таблицы с помощью pyspark

Привет,

Приведенный выше столбец является частью таблицы, с которой я работаю в Databricks. Что я хочу сделать, так это превратить столбец «электронная торговля» в собственную таблицу. В этом случае это означает, что у меня будет новая таблица со столбцами «детали», «продукты» и т. д. В настоящее время "электронная торговля" является типом StringType.

Я пытался использовать создание искрового словаря, табулирование и другие методы, но безуспешно. Код, который у меня есть в настоящее время,

def ecommerce_wtchk_dlt():
    df = dlt.read_stream("wtchk_dlt")
    ddf = df.select(col("ecommerce"))
    header = ddf[0].keys()
    rows =  [x.values() for x in ddf]
    dddf = tabulate.tabulate(rows, header)
    
    return dddf 

Всякий раз, когда я пытаюсь принудительно установить тип электронной коммерции как MapType, у меня возникает ошибка, которая говорит, что, поскольку исходный источник данных - StringType, я могу использовать только тот же самый

какие блоки данных вы используете? лазурь или авс?

Rakesh Govindula 08.02.2023 04:43

Я использую блоки данных Azure. Чего я хочу добиться, так это в основном взять столбец изображения выше, а затем создать новую таблицу, которая будет иметь столбцы («деталь», «продукт», «имя»... и т. д.). Я думал о том, чтобы просто использовать манипуляции со строками, но это кажется слишком сложным методом, поэтому я хотел посмотреть, есть ли у меня способ извлекать контент по-другому.

Trodenn 08.02.2023 08:32

Предоставляйте свои данные в формате кода, а не изображения, которое будет легко воспроизвести.

Rakesh Govindula 08.02.2023 08:37

Пожалуйста, посмотрите, можно ли будет использовать функцию from_json и передать соответствующую схему... Пожалуйста, перейдите по ссылке - Learn.Microsoft.com/en-us/azure/databricks/sql/language-manu‌​al/ …

rainingdistros 08.02.2023 08:38
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
4
60
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я воспроизвел вышеизложенное и смог выполнить ваше требование в этом случае, используя from_json, json_tuple и explode.

Это мой образец данных в том же формате, что и ваш.

Код:

from pyspark.sql import functions as F
from pyspark.sql.types import *

df2 = df.select(F.json_tuple(df["ecommerce"],"detail")).toDF("detail") \
    .select(F.json_tuple(F.col("detail"),"products")).toDF("products")
print("products : ")
df2.show()

schema = ArrayType(StructType([
    StructField("name", StringType()), 
    StructField("id", StringType()),
    StructField("price", StringType()),
    StructField("brand", StringType()),
    StructField("category", StringType()),
    StructField("variant", StringType())
]))
    
final_df=df2.withColumn("products", F.from_json("products", schema)).select(F.explode("products").alias("products")).select("products.*")
print("Final dataframe : ")
final_df.show()

Мой результат:

Другие вопросы по теме