Я знаю, что это довольно простой вопрос, но я в своей жизни не могу заставить его работать, и у меня мало времени, поэтому: У меня есть дикт, который выглядит так
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'>
Любая помощь приветствуется, заранее большое спасибо!
Редактировать: я только что понял, что, просто поставив [] вокруг диктора, я заставлю его работать. Однако, если у кого-то есть менее уродливое решение, я куплю его.
Вы можете привести столбцы к желаемому типу, как только у вас будут данные в 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()))
_я бы | данные | отметка времени |
---|---|---|
62377385587e549976adfda0 | 0,37948282157787916 | 2019-05-01T06:00:00-04:00 |
62377385587e549976adfda0 | 1.5890471705541012 | 2019-05-01T06:00:00-04:00 |
62377385587e549976adfda0 | 2.1883813840381885 | 2019-05-01T06:00:00-04:00 |
Иди с уродом. У прекрасного слишком большая конкуренция: youtube.com/watch?v=LJS7Igvk6ZM