Как я могу создать фрейм данных из этого словаря

Я знаю, что это довольно простой вопрос, но я в своей жизни не могу заставить его работать, и у меня мало времени, поэтому: У меня есть дикт, который выглядит так

data_dict = {'timestamp': '2019-05-01T06:00:00-04:00', 'data': [0.37948282157787916, 1.5890471705541012, 2.1883813840381885], '_id': '62377385587e549976adfda0'}

Как я могу создать из него фрейм данных? Я попытался:

schema = StructType([
  StructField('timestamp', TimestampType(), True),
  StructField('data', ArrayType(DecimalType()), True),
  StructField('_id', StringType(), True)
  ])
df = spark.createDataFrame(data=data_dict, schema=schema)

это дает мне ошибку:

TypeError: StructType can not accept object 'timestamp' in type <class 'str'>

Но даже когда я сжимаю диктовку и убираю метку времени из диктовки и схемы, я получаю аналогичную ошибку:

TypeError: StructType can not accept object 'data' in type <class 'str'>

Любая помощь приветствуется, заранее большое спасибо!

Редактировать: я только что понял, что, просто поставив [] вокруг диктора, я заставлю его работать. Однако, если у кого-то есть менее уродливое решение, я куплю его.

Иди с уродом. У прекрасного слишком большая конкуренция: youtube.com/watch?v=LJS7Igvk6ZM

Bruno Henrique Peixoto 20.03.2022 22:00
Сравнение структур данных: Массивы и объекты в Javascript
Сравнение структур данных: Массивы и объекты в Javascript
Итак, вы изучили основы JavaScript и хотите перейти к изучению структур данных. Мотивация для изучения/понимания Структур данных может быть разной,...
0
1
29
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вы можете привести столбцы к желаемому типу, как только у вас будут данные в df, а затем при необходимости разверните столбец данных, чтобы распределить значения массивов по столбцам.

data_dict = {'timestamp': '2019-05-01T06:00:00-04:00', 'data': [0.37948282157787916, 1.5890471705541012, 2.1883813840381885], '_id': '62377385587e549976adfda0'}
df=spark.createDataFrame([data_dict]).select('_id',explode('data').alias('data'),col('timestamp').cast(TimestampType()))
_я быданныеотметка времени
62377385587e549976adfda00,379482821577879162019-05-01T06:00:00-04:00
62377385587e549976adfda01.58904717055410122019-05-01T06:00:00-04:00
62377385587e549976adfda02.18838138403818852019-05-01T06:00:00-04:00

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